[英]Comparison of char array and char pointer
在玩的時候,我發現了一個結果,我無法理解,這涉及到char數組和指針。
char charArray[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
為什么是charArray != charPtr1/2
,但是charPtr 1 == charPtr2
?
我在創建charPtr1
時會創建一個臨時數組並指向那里。 如果是這樣的話,為什么他們不一樣?
char charArray[] = "Array"; char* charPtr1 = "Array"; char* charPtr2 = "Array";
為什么是charArray!= charPtr1 / 2,但是charPtr 1 == charPtr2?
charArray實際上是char charArray[6] = { 'A', 'r', 'r', 'a', 'y', 0 };
,所以它是一個數組,其包含可以更改
charPtr1和charPtr2是指向char
指針,因此它們都不能等於charArray
(除了charPtr1 = charArray;
當然等)
事實charPtr1和charPtr2是編譯器的優化,一個檢測文字字符串“Array”多次使用,定義一次並使用其地址初始化兩個變量
這可能有所幫助。
拆卸
char charArray1[] = "Array";
char* charPtr1 = "Array";
char* charPtr2 = "Array";
用GCC8.3顯示
charArray1:
.string "Array"
.LC0:
.string "Array"
charPtr1:
.quad .LC0
charPtr2:
.quad .LC0
換句話說,兩個指針指向包含字符串“Array”的相同內存位置,而該數組包含其自己的字符串副本。
正如鏈接所示,由於所討論的類型不同,char數組的內存被分開。 關於指針,因為他們的工作只是指向一些數據,可能編譯器選擇優化相同文字數據的重復分配。
指針的文字數據是只讀的。
第一個char charArray[] = "Array";
相當於char charArray[] = {'A', 'r', 'r', 'a', 'y', '\\0'}
這是具有自動存儲持續時間的數組對象的初始化。
情況2,3都指向同一數組對象的第一個元素,這意味着指針比較相等。 該標准規定6.5.2.5(p7)
:
字符串文字和具有const限定類型的復合文字不需要指定不同的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.