开发者社区> 问答> 正文

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

   int a[5];
    sizeof(a);
    sizeof(&a); 

如上,a是数组名,那么a对C来说不就是数组a的首地址吗,那么&a又是什么意思?&a的内容是什么?

展开
收起
a123456678 2016-06-07 20:09:11 2182 0
1 条回答
写回答
取消 提交回答
  • 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(unsigned long)(32位的机子是4, 64位的机子是8)。

    另外,类型的不同在函数调用传参的时候也会造成区别。假设有如下三个函数:

    void fun1(int a[]) {}
    void fun2(int *a) {}
    void fun3(int (*a)[5]) {}

    fun1和fun2等价(数组退化为指针),可以接受a,传&a就编译不过了。相反,fun3可以接受&a,但是传a就要报错了。

    2019-07-17 19:30:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多