用于二维阵列的C指针

时间:2012-01-30 17:12:31

标签: c arrays pointers multidimensional-array

已声明的数组如下:

char ma[10][20];

使用以下方法获取特定元素的地址:

p = &ma[1][18];

pp++;指向哪个元素?

3 个答案:

答案 0 :(得分:2)

将1添加到数组成员的地址,获取下一个成员的地址。由于p是ma[1][18]的地址,ma[1]是数组p+1的成员,ma[1][19]p++;的地址。 (当然,p=p+1;就像char*

编辑:我当然认为p是{{1}}。如果它是别的,答案可能是其他答案。

答案 1 :(得分:1)

p++收益&ma[1][19]

以下是解释:

char ma[10][20];
char *p = &ma[1][18];

p值为&ma[1][18],等于*(ma + 1) + 18

p++等于p + 1的{​​{1}}等于(*(ma + 1) + 18) + 1等于*(ma + 1) + 19,等于&ma[1][19]

答案 2 :(得分:0)

您没有指定p的类型;假设它是char *,那么p++会将其推进到ma[1][19](1个字符)。

以下是一些变体:

char (*p)[20] = &ma[1];

在这种情况下,p是指向char的20个元素数组的指针,初始化为ma[1];执行p++会使p提前ma[2](20个字符)。

char (*p)[10][20] = &ma;

在这种情况下,p是一个指向10个元素的20个元素char数组的指针,初始化为ma;执行p++会将p提升到紧跟ma(200个字符)之后的下一个元素。