数组名、数组地址、数组首字节地址之间的关系 - c语言编程 - 编程开发
设为首页 加入收藏

TOP

数组名、数组地址、数组首字节地址之间的关系
2018-06-28 19:43:48 】 浏览:63
Tags:地址 字节 之间 关系

定义一个数组

int a[5] = {0};
此处 a的类型看似为整个数组,实际上该数组名 a为一个常量指针,也就是数组第一个元素 a[0]的地址,同理 a+1为第二个元素 a[1]的地址。在上例中,数组名的类型就是 指向int类型的常量指针,该值不可修改。 BUT! BUT! BUT!在数组名作为 sizeof操作符或者单目操作符 &的操作数时数组名 a不作为常量指针,对数组名 &a实际得到的是数组的首地址,其值在数值上与 a&a[0]相同,但含义不同, &a+1实际已经增加了整个数组的长度。
地址关系
#include
  
   
int main(int argc, char *argv[])
{
  int a[5] = {0};

  printf("a  = %p\n", a);
  printf("a + 1 = %p\n", a + 1);
  printf("&a = %p\n", &a);
  printf("&a + 1= %p\n", &a + 1);
  printf("&a[0] = %p\n", &a[0]);
  printf("a[0]  = 0x%x\n", a[0]);
  printf("sizeof(a) = %d\n", sizeof(a));
  printf("sizeof(&a) = %d\n", 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

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇开关量 0 和 1 的数据压缩的C语言.. 下一篇编程开发堆排序问题C语言版

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目