精通Cocos2d-x游戏开发(基础卷)
上QQ阅读APP看书,第一时间看更新

4.3 指针与数组

在C/C++中,数组是一块连续的内存,而且和指针的关系非常密切,一般我们指针的算术操作都是应用在数组中。

int a[] = { 1, 2, 3, 4 };
int* pa = a;
int* pb = &a[0];

将上面的a、pa、pb这3个地址打印出来,会发现它们的地址都是一样的,都指向数组a的首地址,上面的代码首先初始化了一个拥有4个元素的数组,这种写法,已经固定分配了大小为4个int的内存,不可以存入第5个元素了。

可以通过a[1],a[2] 这种下标操作来取出元素,也可以通过*(pa + 1),*(pa + 2)来取出,同时也可以直接操作 *(a + 1),因为数组本身就是一个指针,不同的是,当用sizeof操作符来求a的长度时,返回的是数组的大小4*4,而求pa或pb的时候,返回的是4。

二维数组和指向指针的指针用得比较少,这里也简单介绍一下。

int b[2][4] = { 0, 1, 2, 3, 4, 5, 6, 7 };

上面的数组b是一个2列4行的数组,其中包含了8个元素,可以理解为b由两个长度为4的数组组成,这时b不等于int*,b是二级指针,int**,当用*b将b求解出来的时候,打印后会发现这是第一个数组的地址,而**b才能解析出数组的第一个元素。

对这个二维数组赋值的顺序是先将第一个数组的4个int填满,再填充第二个数组,在内存中的显示如图4-2所示。

图4-2 二维数组

那么使用二级指针b如何来获取数组中的元素呢?

❏**b取出第1个数组中的第1个元素。

❏**(b + 1)取出第2个数组中的第1个元素。

❏*(*b + 1)取出第1个数组中的第2个元素。

❏*(*(b + 1) + 1)取出第2个数组中的第2个元素。

而用int* p来指向b,可以用p来取出二维数组中的所有元素,*p 取出第1个数组中的第1个元素,*(p + 4)取出第2个数组中的第1个元素。