我正在处理一些玩具问题,以了解C语言中指针和数组之间的区别,并且我遇到了一些我还无法理解或找到答案的问题。
我有以下程序:
#include <stdio.h>
int main()
{
int a[3][3] = {{1, 2, 3}, {4, 5,6}, {7, 8, 9}};
int (*b)[3];
b = a;
printf("%d %d %d\n", (*b)[0], (*b)[1], (*b)[2]);
printf("%d %d %d\n", *b[0], *b[1], *b[2]);
b++;
printf("%d %d %d\n", (*b)[0], (*b)[1], (*b)[2]);
b++;
printf("%d %d %d\n", (*b)[0], (*b)[1], (*b)[2]);
return 0;
}
当我编译并运行它时,我得到了这个结果:
me@mac: clang -g q.c -o q.o
me@mac: ./q.o
1 2 3
1 4 7
4 5 6
7 8 9
我的问题是
(*b)[0]
和*b[0]
有什么区别?前者似乎是int *
类型,而后者是int *[3]
类型。如何解释运算符*[]()
以理解这个问题?