黑马程序员技术交流社区

标题: 关于C语言中数组地址的问题! [打印本页]

作者: 伍陶陶    时间: 2015-11-17 21:47
标题: 关于C语言中数组地址的问题!
定义一个数组,int arr[3],  &arr 和 arr 及arr[0]的问题,  &arr+1,是增加一个数组长度的地址值,arr+1 是增加一个int类型长度的值,&arr[0]+1也是增加一个int类型的长度值?这样理解对吗?求大神回答.
作者: cube川    时间: 2015-11-18 20:52
搞不懂你在描述什么,arr存的是数组的首地址,也是arr[0]的地址,你写的这些意义不大啊
作者: poxiao    时间: 2015-11-18 21:08
  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的意义也是在第一个元素的地址基础上偏移一个存储位。可以用如下的代码验证:

作者: 仰望星空的猪    时间: 2015-11-20 11:34
地址+1 是增加一个该数组类型的字节长度。首先地址之间是连续的。
作者: AGHM0312    时间: 2015-11-20 22:18
数组名=数组名取地址=数组首字符地址
作者: IT-capfer    时间: 2015-11-20 22:33
没看懂。。。。。
作者: 石油小硕    时间: 2015-11-21 23:18
差不多就是这样子的吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2