問題

在C中,可以在宣告中使用字串文字,如下所示:

 char s[] = "hello";
 

或者像這樣:

 char *s = "hello";
 

那麼有什麼區別?我想知道在編譯和執行時,在儲存持續時間方面實際發生了什麼.

  最佳答案

這裡的區別是

 char *s = "Hello world";
 

"Hello world" 放置在記憶體的 read-only 部分,並使 s 成為指向它的指標,使這個記憶體上的任何寫入操作都是非法的。

在做時:

 char s[] = "Hello world";
 

將字串放在只讀記憶體中並將字串複製到堆疊上新分配的記憶體中。

 s[0] = 'J';
 

法律。

  相同標籤的其他問題

cstringcharconstants