内存:线性排列
地址:地址 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个元素的数组
本文详细解析了C语言中指针与数组的关系,包括指针加一操作的实际意义,不同类型指针加一的不同行为,以及如何通过指针操作二维数组等内容。
5301

被折叠的 条评论
为什么被折叠?



