簡體   English   中英

在初始化期間為指針指定字符串值時究竟會發生什么?

[英]What exactly happens when pointers are assigned with strings values during initialization?

我很困惑,因為從我學到的東西,指針存儲了他們指向的數據的地址。 但在某些代碼中,我看到在初始化期間經常分配給指針的字符串。

字符串究竟發生了什么?
指針是否自動指定一個地址來存儲字符串並將其自身指向該地址?
“解除引用”如何在指向字符串的指針中起作用?

的情況下

char *p = "String";

編譯器為"String"分配內存,很可能"String"存儲在內存的只讀數據部分,並將指針p設置為指向該內存地址的第一個字節。

p --------------+
                |
                |
                V
             +------+------+------+------+------+------+------+
             |      |      |      |      |      |      |      |
             | 'S'  | 't'  | 'r'  | 'i'  | 'n'  | 'g'  | '\0' |
             |      |      |      |      |      |      |      |
             +------+------+------+------+------+------+------+
              x100    x101   x102   x103   x104   x105   x106

問:我看到在初始化期間經常分配給指針的字符串。

我認為,你所謂的字符串實際上是一個字符串文字

根據C11標准,第§6.4.5章

字符串文字是用雙引號括起來的零個或多個多字節字符的序列,如"xyz" [...]

表示"xyz"產生字符串文字的第一個元素的地址,然后存儲到指針中,正如您在初始化時看到的那樣。

問:指針是否自動分配一個地址來存儲字符串並將其自身指向該地址?

答:不可以,編譯器在編譯時分配用於存儲字符串文字的內存。 字符串文字是存儲在只讀存儲器還是讀寫存儲器中是依賴於編譯器的。 標准僅提到任何修改字符串文字的嘗試都會導致未定義的行為

問:“解除引用”如何在指向字符串的指針中起作用?

答:就像另一個指向任何其他變量的指針一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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