int *a[10]
和int (*a)[10]
有什么区别?
我怀疑由于[]
运算符的优先级高于*
运算符,
第一种情况是一个由10个指针变量组成的数组,该变量存储整数的地址。
我不确定2 nd 的情况是什么,为什么?
答案 0 :(得分:2)
int *a[10]
将a
声明为指向int
的10个指针的数组。
int (*a)[10]
声明a
为指向10个int
数组的指针。
请记住以下两个规则来解密指针声明:
始终从内而外读取声明:从最里面的括号开始(如果有的话)。找到要声明的标识符,然后从那里开始解密声明。
有选择时,请始终将[]和()胜过*
:如果*
在标识符之前,[]
在标识符之后,标识符表示数组,而不是指针。同样,如果*
在标识符之前,()
在标识符之后,则标识符表示函数,而不是指针。 (始终可以使用括号代替[]
来取代()
和*
的正常优先级)。
例如:
int *a[10]; "a is"
^
int *a[10]; "a is an array of 10"
^^^^
int *a[10]; "a is an array of 10 pointers"
^
int *a[10]; "a is an array of 10 pointers to `int`".
^^^
答案 1 :(得分:1)
int *a [10]
-正在声明一个名为a
的10 int *
个数组。
int (*a)[10]
-正在声明一个名为a
的指针,该指针指向10个int
s数组。