【发布时间】:2019-09-13 00:11:14
【问题描述】:
在玩的时候我发现了一个我无法理解的结果,这涉及到 char 数组和指针。
char charArray[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
为什么是charArray != charPtr1/2,却是charPtr 1 == charPtr2?
虽然在创建charPtr1 时,它会创建一个临时数组并指向那里。如果是这样,为什么它们不一样?
【问题讨论】:
-
"它将创建一个 [不同] 临时数组"
-
charPtr1 和 charPtr2 都引用了一个常量“Array”,但 charArray 声明它是自己的存储,因此 *charArray 指向不同的位置。您可以将其视为:将常量“Array”复制到为 charArray[] 分配的存储空间中。我不知道共享常量字符串是在 C 标准中定义的还是特定于编译器的。如果你想让 charPtr1 和 charPtr2 指向与 charArray 相同的东西,那么将它们声明为:char * charPtr1 = charArray;