指针与数组

← 返回 MOC | ← 主页


C语言中只有一维数组,而数组的大小必须在编译期就确定,数组的 元素可以是任何类型的对象 当然可以是另外一个数组

对于一个数组,我们只能做两件事:确定数组大小以及获得指向该数组下标为0的元素的指针

int calendar[12][13];

对于这个代码块,这个表示为该数组有12个数组类型的元素,其中每个数组都是一个拥有31个整形元素的数组,因此sizeof(calendar)的值是372(12*13) 与sizeof(int)的乘积

所以

int *p;
p=calendar[4];//这个语句指向了数组calendar[4]中下标为0的元素
i=calendar[4][7];
i= *(calendar[4]+7);
i=*( *(calendar+4)+7);
//数组名是数组的首地址

p=calendar//错的因为p是整形指针,而calendar是数组calendar[0]的整个数组的指针

为了更好的理解我们引入一个一维数组

  • arr 是首元素的地址,类型是 int*
  • &arr整个数组的地址 ,类型是 int(*)[5](指向含有5个元素的数组的指针)。

虽然它们在数值(内存编号)上是一样的,但在指针步长上完全不同。arr + 1 移动 4 字节,而 &arr + 1 会跳过整个数组。

如果我们需要指向整个数组的指针,就要写

int (*ap)[31]


本章小结

111