为了账号安全,请及时绑定邮箱和手机立即绑定

C语言中对数组a再取址是什么

C语言中对数组a再取址是什么

千万里不及你 2019-04-07 11:19:11
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就要报错了。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 608 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信