这是一个经常会忘却的知识点, 最近也一直在吃这方面的亏索性整个复习一遍把这个知识点彻底牢记
一. 一维数组
若有数组 int a[6];
a 的值是数组首元素的地址, 所以 a+1, 就是第二个元素的地址.
而 & a 是整个数组的地址, 所以 & a+1, 就是向后移动 (10*4) 个单位. 所以相差 40
一维数组方面较为基础, 主要是记忆所以不举例代码
二. 二维数组
二维数组方面是需要稍微费心学习下的
首先是定义方面
若是有数组 a [ 2 ] [ 3 ]
a 代表第 0 行的首地址, 其步长为一行的长度(这里为 12),
所以 a+1 代表第 1 行的首地址, 比 a 大 12;a+2 代表第 2 行的首地址, 比 a 大 24
&a[i]代表第 i 行首地址, 等价于 a+i
a 代表第 0 行第 0 个元素的地址, 其步长为一个元素的长度 (4), 所以 a+1 比 a 大 4(a+1) 代表第 1 行第 0 个元素的地址, 比 * a 大一行的长度(12)
a[i]代表第 i 行首元素地址, 等价于 *(a+i)
&a 代表整个数组的首地址, 其步长为一个数组的大小(24)
所以 & a+1 代表该数组最后一个元素的下个位置的地址, 比 a 大 24
(a+i)+j 代表第 i 行第 j 列元素的地址(a+0)+0 代表第 0 行第 0 个元素, a + 1 代表第 0 行第 1 个元素, 比(a+0)+0 大 4
&a[ i ][ j ]代表第 i 行第 j 列元素的地址, 等价于 *(a+i)+j
实例具体见下图:
(此图来源网络)
实验代码:
- #include<iostream>
- using namespace std;
- int main(){
- int a[2][3] = { 1, 2, 3, 4, 5, '\0' };
- cout << a << endl;
- cout << &a << endl;
- cout << *a << endl;
- return 0;
- }
输出结果为:
来源: http://www.bubuko.com/infodetail-3286437.html