簡體   English   中英

char數組和char指針的比較

[英]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 }; ,所以它是一個數組,其包含可以更改

charPtr1charPtr2是指向char指針,因此它們都不能等於charArray (除了charPtr1 = charArray;當然等)

事實charPtr1charPtr2是編譯器的優化,一個檢測文字字符串“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM