[英]What is the difference between the usage of pointer in the following declarations?
char *array[size];
char (*aPointer)[size];
我是C ++的新手,目前正在做一个赋值工作,我注意到有两种不同的(也许?)指针用法。 谁能告诉我他们有什么区别? 谢谢
char *array[size]
声明一个指向char
的size
指针数组。
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 +<---+ |
+--------+ +--------+
| ... |
+--------+
请注意,在所有这些示例中,指针最初都没有指向任何东西。 您必须自己将它们指向某处。
第一个声明了一个指向char
的size
指针数组。 第二个声明了一个指向char
类型的size
元素数组的指针。
您可以将其视为比*
更强的[]
运算符绑定。 开始在标识符处读取这样的声明,然后向外进行操作。 在第一种情况下,我们看到了标识符array
。 旁边有[]
和*
。 []
绑定比*
更牢固,因此它首先适用。 因此, array
是事物的数组。 接下来应用*
,因此array
是一个指向某物的指针数组。 剩下的唯一是类型说明符char
,因此array
是一个指向char
的指针的数组。 第二种情况类似地起作用,仅在这里有括号,迫使*
在[]
之前应用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.