该怎么去理解数组指针指向二维数组呢?
代码:int array = {{0, 1, 2}, {3, 4, 5}};
int (*p) = array;
按数组指针的定义:指针p是指向一个有三个元素的数组。
然后二维数组:012
345
嗯,无法理解。为什么(*p)【3】=array
还有**(p+1)在上面的代码中又是该怎么理解呢? 本帖最后由 zzzyl 于 2022-2-19 11:15 编辑
首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是一维数组与普通指针。
在此基础上理解二维数组和数组指针,二维数组array可以理解为数组的数组,类似于一个指针指向了一个另指针。(*p)可以理解为一个指针指向含有三个元素一个数组,可以粗浅理解为一个指针指向了另一个指针,这样来看,就有了int(*p) = array。这只是简单理解,实际上因为它们的跨度是相同的,都是3。
**(p + 1)可以看作是p或者p。因为定义的是int (*p),指针p的跨度是3,即p+1相当于移动三个int元素的长度,也就是一个含有三个int元素的数组长度,所以p+1指向二维数组中{3,4,5}。*被叫做解引用,可以简单理解为[],一个*相当于一个[],例如*(*(p + 1) + 2)就可以看作是p。
上面只是比较简单的理解指针(其实我自己都这么理解的{:5_109:}),想要更深入的话需要看书或者看相关视频。小甲鱼的《带你学c带你飞》里关于指针讲的也挺清楚的。 学汇编语言 按数组指针的定义:指针p是指向一个有三个元素的数组。这个理解错误啦 zzzyl 发表于 2022-2-19 00:02
首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是 ...
我看了谭浩强的c语言程序设计和你的理解是差不多的,谢谢大佬!!
页:
[1]