cinta[5];sizeof(a);sizeof(&a);如上,a是数组名,那么a对C来说不就是数组a的首地址吗,那么&a又是什么意思?&a的内容是什么?
2 回答
www说
TA贡献1775条经验 获得超8个赞
a和&a的值是相同的,都等于a[0]的地址,区别是两者类型不同。用下面的代码打印一下就知道值是一模一样的了:printf("a=%p\n",a);printf("&a=%p\n",&a);printf("&a[0]=%p\n",&a[0]);a的类型是int[5],&a的类型是int(*)[5]。所以,sizeof(a)求的是整个数组的字节数(一般的机子都是20),而sizeof(&a)求的是一个指针的字节数,等于sizeof(unsignedlong)(32位的机子是4,64位的机子是8)。另外,类型的不同在函数调用传参的时候也会造成区别。假设有如下三个函数:voidfun1(inta[]){}voidfun2(int*a){}voidfun3(int(*a)[5]){}fun1和fun2等价(数组退化为指针),可以接受a,传&a就编译不过了。相反,fun3可以接受&a,但是传a就要报错了。
添加回答
举报
0/150
提交
取消