组中地址加1 理解与举例"/>
C语言 数组中地址加1 理解与举例
文章简介
数组中 地址+n 所代表的的意义
一维数组
初始化数组
A[3] = {1,2,3};
遍历数组
sizeof(int) = 4,即一个int大小为4个字节,可见每个元素间隔4个字节
代码 | 值 | 指向的值 即:*(代码) |
---|---|---|
&A[0] | 0X0061FF10 | 1 |
&A[1] | 0X0061FF14 | 2 |
&A[2] | 0X0061FF18 | 3 |
&A[3] | 0X0061FF1C | 乱码 |
开始操作
代码 | 值 | 指向的值即:*(代码) | 解释 |
---|---|---|---|
&A+1 | 0X0061FF1C | 乱码 | +1加的是一个A(即+3个int)的大小 相当于是A[3](越界) |
&A[0] +1 | 0X0061FF14 | 1 | +1加的是一个A[0](即+1个int)的大小 相当于是A[1] |
&A[0] +2 | 0X0061FF18 | 2 | +2加的是两个A[0](即+2个int)的大小 相当于是A[2] |
二维数组
初始化数组
int A[2][3] = {{1,2,3},{4,5,6}};
遍历数组
代码 | 值 | 指向的值即:*(代码) |
---|---|---|
&A[0][0] | 0X0061FEFC | 1 |
&A[0][1] | 0X0061FF00 | 2 |
&A[0][2] | 0X0061FF04 | 3 |
&A[1][0] | 0X0061FF08 | 4 |
&A[1][1] | 0X0061FF0C | 5 |
&A[1][2] | 0X0061FF10 | 6 |
开始操作
代码 | 值 | 指向的值即:*(代码) | 解释 | 相当于 |
---|---|---|---|---|
&A+1 | 0X0061FF1C | 乱码 | +1加的是一个A的大小(即+1*(2*3)个int) | A[3][0](越界) |
&A[0] +1 | 0X0061FF08 | 0X61FF08 | +1加的是一个A[0]的大小(即+1*3个int) | A[1]的值(一个地址) |
*(&A[0] +1) | 0X0061FF08 | 4 | 对上面取值 | 相当于是A[1][0] |
&A[0][0] +1 | 0X0061FF00 | 2 | +1加的是一个A[0][0]的大小(即+1*1个int) | A[0][1] |
总结
数组地址加n要看主体是什么:
- &A+n 加的是n个A的大小
- &A[0] + n 加的是n个A[0]的大小
- &A[0][0] + n 加的是n个A[0][0]的大小
需要注意的是A[0]、A[0][0]在不同维度数组中代表的意义不同,例如A[0]:
- 在一维数组中代表第一个元素,即一个数值
- 在二位数组中代表第一个元素,即一个一维数组,即一个地址,需要再加*取值
应用举例
遍历一维数组
初始化数组:int A[3] = {1,2,3};//记住:3个元素
- 方式1:正常遍历
for(int i = 0;i < 3;i++)printf("%d\t",A[i]);
- 方式2:使用指针
for(int *p = &A[0];p < &A[0]+3;p++)printf("%d\t",*p);
其中for中的条件可以换成以下:
for范围 | 等价于 |
---|---|
p <= &A[2] | 基础式 |
p <= &A[0] + 2 | p <= &A[2] |
p < &A[3] | 基础式 |
p < &A[0] + 3 | p < &A[3] |
p < *(&A+1) | p < &A[3] |
遍历二维数组
初始化:int A[2][3] = {{1,2,3},{4,5,6}};//记住:行数是2,列数是3
- 方式1:正常遍历
for(int i = 0;i < 2;i++)for(int j = 0;j < 3;j++)printf("%d\t",A[i][j]);
- 方式2:使用指针
for(int *p = &A[0][0];p < &A[0][0] + 2*3;p++)printf("%d\t",*p);
其中for中的条件可以换成以下:
for范围 | 等价于 |
---|---|
p <= &A[1][2] | 基础式 |
p <= &A[0][0] + 5 | p <= &A[1][2] |
p < &A[2][0] | 基础式 |
p < &A[0][0] + 6 | p < &A[2][0] |
p < *(&A[0] + 2) | p < &A[2][0] |
p < **(&A+1) | p < &A[2][0] |
更多推荐
C语言 数组中地址加1 理解与举例
发布评论