char *array[size];
char (*aPointer)[size];
我对C ++很陌生,目前正在从事一项作业,我注意到有两种不同的(也许?)指针用法。 谁能告诉我他们有什么区别? 谢谢
答案 0 :(得分:2)
char *array[size]
声明了size
个指向char
的指针的数组。
char (*aPointer)[size]
声明了一个指向size
char
s数组的指针。
仅出于完整性考虑,还有char *cPointer
,它声明了指向char
的指针,该指针可以是数组中的第一个指针。那和aPointer
之间的区别是语义上的。内存布局将相同。例如,aPointer + 1
将返回指向size
所指向的位置后aPointer
个字节的指针,而cPointer + 1
将返回指向该位置的指针cPointer
所指向的字节之后的一个字节。
因此char *array[size]
声明如下:
array +--------+
+------+ | a char |
| a[0] +--->+--------+
+------+
| a[1] +--->+--------+
+------+ | a char |
| ... | +--------+
+------+
当然,所指向的每个char
也可以是数组的第一个元素:
array +--------+--------+--------+
+------+ | a char | a char | ... |
| a[0] +--->+--------+--------+--------+
+------+
| a[1] +--->+--------+--------+--------+
+------+ | a char | a char | ... |
| ... | +--------+--------+--------+
+------+
char (*aPointer)[size]
声明如下:
aPointer
+--------+ +--------+
| +--->+ a char |
+--------+ +--------+
| a char |
+--------+
| ... | aPointer + 1
+--------+ +--------+
<---+ |
+--------+
char *cPointer
可以这样声明:
cPointer
+--------+ +--------+
| +--->+ a char | cPointer + 1
+--------+ +--------+ +--------+
| a char +<---+ |
+--------+ +--------+
| ... |
+--------+
请注意,在所有这些示例中,指针最初都没有指向任何东西。您必须自己将它们指向某处。
答案 1 :(得分:0)
第一个声明size
指向char
的指针的数组。第二个声明了一个指向size
类型的char
元素数组的指针。
您可以将其视为[]
运算符比*
更强大的绑定。开始在标识符处读取这样的声明,然后向外进行操作。在第一种情况下,我们看到标识符array
。在它旁边,我们有[]
和*
。 []
的绑定比*
绑定更牢固,因此它首先适用。因此,array
是一个东西数组。接下来应用*
,因此array
是一个指向某物的指针数组。剩下的唯一是类型说明符char
,因此array
是指向char
的指针的数组。第二种情况类似地起作用,仅在这里有括号,迫使*
在[]
之前应用。