A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伍陶陶 中级黑马   /  2015-11-17 21:47  /  1182 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个数组,int arr[3],  &arr 和 arr 及arr[0]的问题,  &arr+1,是增加一个数组长度的地址值,arr+1 是增加一个int类型长度的值,&arr[0]+1也是增加一个int类型的长度值?这样理解对吗?求大神回答.

6 个回复

倒序浏览
搞不懂你在描述什么,arr存的是数组的首地址,也是arr[0]的地址,你写的这些意义不大啊
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     int arr[3] = {0, 1, 2};

  6.     printf("%x %x %x\n", &arr, arr, &arr[0]);
  7.     printf("%x %x %x", &arr+1, arr+1, &arr[0]+1);
  8.     return 0;
  9. }
复制代码
楼主的理解是正确的,数组名代表的地址其值虽然跟&arr[0]的值一样但是意义不一样,&arr是取整个数组的首地址,相当于一个数组指针,在整个数组的首地址基础上加1就相当于加上这个数组的元素占用的长度。arr + 1在数组的语法中代表的就是相对于起始位置偏移一个位置,&arr[0]+1的意义也是在第一个元素的地址基础上偏移一个存储位。可以用如下的代码验证:
回复 使用道具 举报
地址+1 是增加一个该数组类型的字节长度。首先地址之间是连续的。
回复 使用道具 举报
数组名=数组名取地址=数组首字符地址
回复 使用道具 举报
没看懂。。。。。
回复 使用道具 举报
差不多就是这样子的吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马