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

来源:互联网 发布:今日非农数据 编辑:程序博客网 时间:2024/06/05 14:19

内存:线性排列

地址:地址 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个元素的数组