二维数组中,a+i表示第i行的地址,那为什么*(a+i)也表示第i行的地址.
二维数组中,a+i表示第i行的地址,那为什么*(a+i)也表示第i行的地址.
最佳回答
a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。
再问: 麻烦您解释一下具体是怎样不同的吧
再答: 例如下面定义:int a[10][10];对于a+i来说,其实它的类型还是二维数组,所以a+i+j的地址,实际会比a+i的值大j*10*sizeof(int),而(*(a+i))+j比*(a+i)的值大j*sizeof(int)这就是明显的不同。也可以理解为a+x的值跟(*a)+x这样的操作的步长是不一样的,因为它们的类型不一样,同样,sizeof(a+i)跟sizeof(*(a+i))也是不一样的。
再问: *(*(a+i)+j)表示a[i][j], a+i表示第i行首地址a[i],这我理解,那*(a+i)+j不就是获得指针a+i所向的数值再加j吗?关键是*(a+i)+j这怎么理解?
再答: a+i == &a[i]
*(a+i) == a[i]
*(a+i)+j == a[i]+j == &a[i][j]
不能把*(a+i)理解为是a+i所指向的数值,为什么呢?因为a+i这个指针实际是没有一个内存单元来存储的,它是常量指针,它的所有计算都是由编译器来处理的,不需要内存存储。它跟2维指针是不一样的。例如:
int* ap[10];
这里的ap+i是有实际的存储的。
再问: 麻烦您解释一下具体是怎样不同的吧
再答: 例如下面定义:int a[10][10];对于a+i来说,其实它的类型还是二维数组,所以a+i+j的地址,实际会比a+i的值大j*10*sizeof(int),而(*(a+i))+j比*(a+i)的值大j*sizeof(int)这就是明显的不同。也可以理解为a+x的值跟(*a)+x这样的操作的步长是不一样的,因为它们的类型不一样,同样,sizeof(a+i)跟sizeof(*(a+i))也是不一样的。
再问: *(*(a+i)+j)表示a[i][j], a+i表示第i行首地址a[i],这我理解,那*(a+i)+j不就是获得指针a+i所向的数值再加j吗?关键是*(a+i)+j这怎么理解?
再答: a+i == &a[i]
*(a+i) == a[i]
*(a+i)+j == a[i]+j == &a[i][j]
不能把*(a+i)理解为是a+i所指向的数值,为什么呢?因为a+i这个指针实际是没有一个内存单元来存储的,它是常量指针,它的所有计算都是由编译器来处理的,不需要内存存储。它跟2维指针是不一样的。例如:
int* ap[10];
这里的ap+i是有实际的存储的。
最新回答共有2条回答
-
2026-04-01 18:31:10迅速的火
回复a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。 再问: 麻烦您解释一下具体是怎样不同的吧 再答: 例如下面定义:int a[10][10];对于a+i来说,其实它的类型还是二维数组,所以a+i+j的地址,实际会比a+i的值大j*10*sizeof(int),而(*(a+i))+j比*(a+i)的值大j*sizeof(int)这就是明显的不同。也可以理解为a+x的值跟(*a)+x这样的操作的步长是不一样的,因为它们的类型不一样,同样,sizeof(a+i)跟sizeof(*(a+i))也是不一样的。再问: *(*(a+i)+j)表示a[i][j], a+i表示第i行首地址a[i],这我理解,那*(a+i)+j不就是获得指针a+i所向的数值再加j吗?关键是*(a+i)+j这怎么理解? 再答: a+i == &a[i]*(a+i) == a[i]*(a+i)+j == a[i]+j == &a[i][j]不能把*(a+i)理解为是a+i所指向的数值,为什么呢?因为a+i这个指针实际是没有一个内存单元来存储的,它是常量指针,它的所有计算都是由编译器来处理的,不需要内存存储。它跟2维指针是不一样的。例如:int* ap[10];这里的ap+i是有实际的存储的。
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
