这是一个C代码
int (*a)[3];
a
是指向3个整数数组的指针
a=(int (*)[3])malloc(sizeof(int)*3);
注意这里使用的Typecast;必须在显示的类型转换中指定元素数量。此外,*
周围的括号是必要的。
printf("brrbrrbrr %d %d %d %d\n",&a,a,a+1,a+2);
*(a+0)[0]=40;
*(a+0)[1]=41;
*(a+0)[2]=42;
printf("noobnoob %d %d %d \n",a[0][0],*(a+0)[1],(*(*(a+0)+2)));
输出结果为:
brrbrrbrr -7077000 29278656 29278668 29278680
noobnoob 40 41 0
我不明白为什么最后一个数字是0而不是42?
答案 0 :(得分:1)
索引的优先级高于取消引用指针的优先级。你的作业没有做你想要的。它们的评估如下:
*((a+0)[0])=40;
*((a+0)[1])=41;
*((a+0)[2])=42;
如果你想保留你的语法,你应该使用括号,如:
(*(a+0))[0] = 40;
(*(a+0))[1] = 41;
(*(a+0))[2] = 42;
这同样适用于打印数组的第二个元素。 *(a+0)[1]
应为(*(a+0))[1]
。
答案 1 :(得分:0)
您正在寻找的是
int (*a)[3] = malloc(sizeof(int) *3);
(*a)[0] = 40;
(*a)[1] = 41;
(*a)[2] = 42;
printf("%d %d %d\n",(*a)[0],(*a)[1],(*a)[2]);
a是指向3个int成员数组的指针。因此,为指针分配内存并存储值,如上所示。
如果您想要存储值的地址,那么您应该
printf("%p\n",(void*)(a)[0]);