我知道:
Foo *array[10]; // array of 10 Foo pointers
Foo (*array)[10]; // pointer to array of 10 Foos
但是,我并不真正理解这种符号背后的逻辑。也就是说,为什么第一部分创建一个指针数组,为什么第二部分会创建一个指向数组的指针?
当然,我很容易记住这个符号,但我想知道它背后的逻辑。
答案 0 :(得分:3)
对于任何类型T
,T *
表示新类型,“指向T
”。
当T = Foo[10]
时,T *
是指向10 Foo
数组的指针。
然而,符号Foo * p[10]
从左到右,贪婪地解析为(Foo *) p [10]
,因此是一个十Foo *
的数组。要获得所需的指向数组的指针,您必须将变量名称分组更接近星号,因此T (*p)
或Foo (*p) [10]
。