|
5啊哈币
先放出一段代码,新手可能有写的不好或者不对的地方
# include <stdio.h> // 1
void fun(int a[]) // 2
{ // 3
int t; // 4
for(t=0; t<5; t++) // 5
printf("%d ", a[t]); // 6
} // 7
int main() // 8
{ // 9
int a[5]= {1,2,3,4,5}; // 10
fun(a); // 11
return 0; // 12
} // 13
重点是第十一行代码,C语言是不是要求形参跟实参的类型必须一致么?但是在第二行中明明fun需要的参数是一个数组
但是第十一行传递的却是a数组的入口地址这样一来形参跟实参的类型不就不一致了么?问别人,有人说C语言中数组无法直接进行相互传递,只能借助指针将入口地址传递过去就行了,但是我想说的是fun(*a)跟fun(a[5])(或者fun(a[]))难道一样么? |
最佳答案
查看完整内容
你可以理解成“C语言中根本没有数组这种东西”,有的只是连续分配空间的一种语法糖。
数组在绝大多数情况下都会转换成一个指针,例如a[1]其实不是读取数组元素,编译器总是把它处理成 *(a + sizeof(int) * 1),所以你甚至可以写 1[a]
函数传递参数时,如果参数是数组,则会转换成指向数组首地址的指针
也就是你写编译器会自动转化为如果你写也会被转化为数组的长度是无法用一个参数就传递进去的,因为数组这时候被转换成了指 ...
|