C语言内存,地址,+1尺度,二维数组

本文详细解析了C语言中指针与数组的关系,包括指针加一操作的实际意义,不同类型指针加一的不同行为,以及如何通过指针操作二维数组等内容。

内存:线性排列

地址:地址 4 bytes

地址+1 尺度

void* address  +1  0xffff ff00  0xffff ff01

int  * address  +1  0xffff ff00   0xffff ff04 移动sizeof(int)

struct s

{

int a;

float b;

};

struct s* address + 10xffff ff00  0xffff ff08 移动sizeof(struct s)

地址+1根据指针的类型不同而不同,+1尺度是由此指针指向的元素的大小就决定的

int a[4][2]

a+1                 :2*sizeof(int)

a[1]+1             :sizeof(int)

&a[1][1] + 1     :sizeof(int)

[2]相当于*(X+2)

a指向的是一个数组的首地址,这个数组长度是4,数组中的元素是数组

C语言静态语言变量值与其类型是一对不可分割的元素

指针变量的类型表明其

+操作移动的地址

*操作指向的对象

======================================================

二维数组的名字是一个指针,这个指针指向的是一个元素,这个元素是一个数组,数组的元素的个数是列数,这样就够了

所以a+1 会产生上面的地址偏移

在使用二维数组的时候

void function(int a[][4])和void  function(int a[2][4])都行因为这两种情况a都是指向一个有4个元素的数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值