c/c++语言开发共享数组名、数组地址、数组首字节地址之间的关系

定义一个数组 int a[5] = {0}; 此处a的类型看似为整个数组,实际上该数组名a为一个常量指针,也就是数组第一个元素a[0]的地址,同理a+1为第二个元素a[1]的地址。在上例中,数组

定义一个数组

  int a[5] = {0};

此处a的类型看似为整个数组,实际上该数组名a为一个常量指针,也就是数组第一个元素a[0]的地址,同理a+1为第二个元素a[1]的地址。在上例中,数组名的类型就是指向int类型的常量指针,该值不可修改。 but! but! but!在数组名作为sizeof操作符或者单目操作符&的操作数时数组名a不作为常量指针,对数组名&a实际得到的是数组的首地址,其值在数值上与a&a[0]相同,但含义不同,&a+1实际已经增加了整个数组的长度。
c/c++语言开发共享数组名、数组地址、数组首字节地址之间的关系

  #include  int main(int argc, char *argv[])  {    int a[5] = {0};      printf("a  = %pn", a);    printf("a + 1 = %pn", a + 1);    printf("&a = %pn", &a);    printf("&a + 1= %pn", &a + 1);    printf("&a[0] = %pn", &a[0]);    printf("a[0]  = 0x%xn", a[0]);    printf("sizeof(a) = %dn", sizeof(a));    printf("sizeof(&a) = %dn", sizeof(&a));    return 0;  }

结果:

  a= 0xbf840eac //首元素地址  a + 1  = 0xbf840eb0  &a  = 0xbf840eac //数组首地址  &a + 1 = 0xbf840ec0 //(&a+1) - (a) = 0x14 = 20 = 5*sizeof(int)  &a[0]  = 0xbf840eac //取首元素地址  a[0]= 0x0  sizeof(a) = 20  sizeof(&a) = 4

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607525.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐