在玩耍的过程中,我发现了一个结果,涉及到字符数组和指针,让我无法理解。
char charArray[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
为什么
charArray != charPtr1/2
,但是charPtr1 == charPtr2
?我认为在创建
charPtr1
时,它会创建一个临时数组并指向那里。如果是这样的话,为什么它们不同呢?在玩耍的过程中,我发现了一个结果,涉及到字符数组和指针,让我无法理解。
char charArray[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
charArray != charPtr1/2
,但是charPtr1 == charPtr2
?charPtr1
时,它会创建一个临时数组并指向那里。如果是这样的话,为什么它们不同呢?char charArray1[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
使用GCC8.3显示
charArray1:
.string "Array"
.LC0:
.string "Array"
charPtr1:
.quad .LC0
charPtr2:
.quad .LC0
char charArray[] = "Array"; char* charPtr1 = "Array"; char* charPtr2 = "Array";
why is charArray != charPtr1/2, but charPtr 1 == charPtr2?
charArray
实际上是一个数组,它的内容可以被更改。格式为char charArray[6] = { 'A', 'r', 'r', 'a', 'y', 0 };
。
charPtr1和charPtr2都是指向char
类型的指针,因此它们不可能等于charArray
(除非在执行charPtr1 = charArray;
等操作后)。char charArray[] = "Array";
等同于char charArray[] = {'A', 'r', 'r', 'a', 'y', '\0'}
,这是对具有自动存储期的数组对象进行初始化。6.5.2.5(p7)
:
字符串字面值和带有const限定类型的复合字面值不需要指定不同的对象。