在 C 语言中使用数组和指针时,人们很快就会发现它们绝不是等价的,尽管乍一看似乎是等价的。我知道 L 值和 R 值的差异。不过,最近我试图找出可以与二维数组结合使用的指针类型,即
int foo[2][3];
int (*a)[3] = foo;
但是,尽管 *
和 []
有常规的运算符优先级规则,但我就是不知道编译器如何“理解” a 的类型定义.相反,如果我使用 typedef,问题就会变得简单得多:
int foo[2][3];
typedef int my_t[3];
my_t *a = foo;
最后,有人可以回答我关于编译器如何读取术语 int (*a)[3]
的问题吗? int a[3]
很简单,int *a[3]
也很简单。但是,为什么不是 int *(a[3])
?
编辑:当然,我指的是“typedef”而不是“typecast”(这只是一个错字)。
最佳答案
每当您对复杂的声明有疑问时,可以使用 cdecl类 Unix 系统中的工具:
[/tmp]$ cdecl
Type `help' or `?' for help
cdecl> explain int (*a)[10];
declare a as pointer to array 10 of int
编辑:
此工具还有一个在线版本here .
感谢 Tiberiu Ana 和 gf
关于c++ - int(*a)的解释[3],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250397/