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

cinta[5];
sizeof(a);
sizeof(&a);
如上,a是数组名,那么a对C来说不就是数组a的首地址吗,那么&a又是什么意思?&a的内容是什么?
千万里不及你
浏览 609回答 2
2回答

www说

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就要报错了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript