- 主题:不懂就问,关于指向二维数组的指针问题
基础较差,找了一本写的比较细的《C语言编程魔法书》系统的复习一下。看到以下代码,但不知道语句“p[0][1][2] += 100;”的p[0]是啥含义?度娘了以下没找到答案,谢谢。
#include <stdio.h>
int main(int argc, const char * argv[])
{ // 声明了一个二维数组a,具有2个元素,
// 其中每个元素为一个int[3]的数组
int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
// 声明了一个指向二维数组int[2][3]的指针对象p,
// 并用数组a的地址对它初始化
int (*p)[2][3] = &a;
// 修改二维数组元素a[0][0]的值
(*p)[0][0] += 10;
printf("a[0][0] = %d\n", a[0][0]); // 修改二维数组a[1][2]的值
p[0][1][2] += 100;
printf("a[1][2] = %d\n", a[1][2]); // (*p)的大小为2 * 3 * sizeof(int)
printf("size of (*p) = %zu\n", sizeof(*p));
}
--
FROM 111.38.29.*
找正经教材,然后看明白数组和指针相关章节
【 在 cyberdyne (dyne) 的大作中提到: 】
: 基础较差,找了一本写的比较细的《C语言编程魔法书》系统的复习一下。看到以下代码,但不知道语句“p[0][1][2] += 100;”的p[0]是啥含义?度娘了以下没找到答案,谢谢。
: #include <stdio.h>
: int main(int argc, const char * argv[])
: ...................
--
FROM 125.36.96.*
这个教材不太行嘛,感觉写的挺清楚
【 在 tgfbeta 的大作中提到: 】
: 找正经教材,然后看明白数组和指针相关章节
--
FROM 117.136.116.*
对任何裸指针p来说, *p 和 p[0]是一样的,p[0] = *(p + 0) = *p。
所以(*p)[1][2]就是p[0][1][2],你这个例子中p是一个指向数组的指针,数组是2行3列。
刚学感觉没必要去搞这么复杂的东西,要用到二维数组的地方,直接传递引用就完事了。
--
FROM 123.115.161.*
茅塞顿开!谢谢。
完全是好玩,和工作毫无关系。:)
【 在 z16166 的大作中提到: 】
: 对任何裸指针p来说, *p 和 p[0]是一样的,p[0] = *(p + 0) = *p。
: 所以(*p)[1][2]就是p[0][1][2],你这个例子中p是一个指向数组的指针,数组是2行3列。
: 刚学感觉没必要去搞这么复杂的东西,要用到二维数组的地方,直接传递引用就完事了。
--
FROM 117.136.103.*
可以看C primer plus这种基础的书,里面有专门讲指针的,搞清楚地址的含义。
【 在 cyberdyne 的大作中提到: 】
: 基础较差,找了一本写的比较细的《C语言编程魔法书》系统的复习一下。看到以下代码,但不知道语句“p[0][1][2] += 100;”的p[0]是啥含义?度娘了以下没找到答案,谢谢。
: #include <stdio.h>
: int main(int argc, const char * argv[])
: ...................
--
FROM 183.12.242.*