菜鸟教程java二维数组_C 多维数组 | 菜鸟教程

本文详细探讨了C语言中二维数组的内存布局,指出二维数组实际上是线性存储,按行顺序存放。通过示例代码展示了数组地址的计算方式,解释了数组名的步长为一行的长度,而元素的步长则等于单个元素的大小。内容包括二维数组的内存地址分析和元素地址增加规律。

二维数组在逻辑上是方阵,由行和列组成。

但是二维数组在物理上是线性的,按行来依次进行存放,内存是连续的。

二维数组名的步长是一行的长度,比如一下例子中:

age + 1 address is 00EFFC04

age + 2 address is 00EFFC14

因为每一行有四个元素,每个int类型的元素占四个字节,一行有16个字节,所以数组名age加1后地址增加了16个字节说明数组名的步长位一行的长度。

具体到每一个元素加1的时候,地址增加的是一个元素所占字节的大小,因此元素的步长即为元素本身的大小,例如:

age[2][0] + 0 address is 00EFFC14

age[2][0] + 1 address is 00EFFC18

示例及运行结果:

#include

int main()

{

int age[6][4];

for (int i = 0; i < sizeof(age)/sizeof(age[0]) ; i++)

{

printf("age + %d address is %p\n",i, age + i);

}

for (int i = 0; i < sizeof(age) / sizeof(age[0]); i++)

{

for (int j = 0; j < sizeof(age[0]) / sizeof(int); j++)

{

printf("age[%d][0] + %d address is %p\n",i,j,&age[i][0]+j);

}

}

}

输出结果:

age + 0 address is 0x7fffd98b9400

age + 1 address is 0x7fffd98b9410

age + 2 address is 0x7fffd98b9420

age + 3 address is 0x7fffd98b9430

age + 4 address is 0x7fffd98b9440

age + 5 address is 0x7fffd98b9450

age[0][0] + 0 address is 0x7fffd98b9400

age[0][0] + 1 address is 0x7fffd98b9404

age[0][0] + 2 address is 0x7fffd98b9408

age[0][0] + 3 address is 0x7fffd98b940c

age[1][0] + 0 address is 0x7fffd98b9410

age[1][0] + 1 address is 0x7fffd98b9414

age[1][0] + 2 address is 0x7fffd98b9418

age[1][0] + 3 address is 0x7fffd98b941c

age[2][0] + 0 address is 0x7fffd98b9420

age[2][0] + 1 address is 0x7fffd98b9424

age[2][0] + 2 address is 0x7fffd98b9428

age[2][0] + 3 address is 0x7fffd98b942c

age[3][0] + 0 address is 0x7fffd98b9430

age[3][0] + 1 address is 0x7fffd98b9434

age[3][0] + 2 address is 0x7fffd98b9438

age[3][0] + 3 address is 0x7fffd98b943c

age[4][0] + 0 address is 0x7fffd98b9440

age[4][0] + 1 address is 0x7fffd98b9444

age[4][0] + 2 address is 0x7fffd98b9448

age[4][0] + 3 address is 0x7fffd98b944c

age[5][0] + 0 address is 0x7fffd98b9450

age[5][0] + 1 address is 0x7fffd98b9454

age[5][0] + 2 address is 0x7fffd98b9458

age[5][0] + 3 address is 0x7fffd98b945c

可以看到每一个元素占了四个字节的大小,并且这24的元素的地址是连续的。

SageCat

SageCat

107***2242@qq.com3年前 (2018-03-27)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值