栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 数组中地址加1 理解与举例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 数组中地址加1 理解与举例

文章简介

数组中 地址+n 所代表的的意义

一维数组 初始化数组

A[3] = {1,2,3};

遍历数组

sizeof(int) = 4,即一个int大小为4个字节,可见每个元素间隔4个字节

代码指向的值 即:*(代码)
&A[0]0x0061FF101
&A[1]0x0061FF142
&A[2]0x0061FF183
&A[3]0x0061FF1C乱码
开始操作
代码指向的值即:*(代码)解释
&A+10x0061FF1C乱码+1加的是一个A(即+3个int)的大小 相当于是A[3](越界)
&A[0] +10x0061FF141+1加的是一个A[0](即+1个int)的大小 相当于是A[1]
&A[0] +20x0061FF182+2加的是两个A[0](即+2个int)的大小 相当于是A[2]
二维数组 初始化数组

int A[2][3] = {{1,2,3},{4,5,6}};

遍历数组
代码指向的值即:*(代码)
&A[0][0]0x0061FEFC1
&A[0][1]0x0061FF002
&A[0][2]0x0061FF043
&A[1][0]0x0061FF084
&A[1][1]0x0061FF0C5
&A[1][2]0x0061FF106
开始操作
代码指向的值即:*(代码)解释相当于
&A+10x0061FF1C乱码+1加的是一个A的大小(即+1*(2*3)个int)A[3][0](越界)
&A[0] +10x0061FF080x61FF08+1加的是一个A[0]的大小(即+1*3个int)A[1]的值(一个地址)
*(&A[0] +1)0x0061FF084对上面取值相当于是A[1][0]
&A[0][0] +10x0061FF002+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("%dt",A[i]);	
  • 方式2:使用指针
for(int *p = &A[0];p < &A[0]+3;p++)
	printf("%dt",*p);

其中for中的条件可以换成以下:

for范围等价于
p <= &A[2]基础式
p <= &A[0] + 2p <= &A[2]
p < &A[3]基础式
p < &A[0] + 3p < &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("%dt",A[i][j]);
  • 方式2:使用指针
for(int *p = &A[0][0];p < &A[0][0] + 2*3;p++)
	printf("%dt",*p);

其中for中的条件可以换成以下:

for范围等价于
p <= &A[1][2]基础式
p <= &A[0][0] + 5p <= &A[1][2]
p < &A[2][0]基础式
p < &A[0][0] + 6p < &A[2][0]
p < *(&A[0] + 2)p < &A[2][0]
p < **(&A+1)p < &A[2][0]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号