字串常量

2021-07-25 08:21:57 字數 769 閱讀 2430

寫出下列程式的輸出結果

char* s="aaa";\

printf("%s",s);

s[0]='b';

printf("%s",s);

正確答案:

aaa段錯誤

"aaa"

是字串常量。s是指標,指向這個字串常量,所以宣告s的時候就有問題。 cosnt char* s="aaa";然後又因為是常量,所以對是s[0]的賦值操作是不合法的。

編譯能夠通過,但是執行期間會發生段錯誤

這道題考的是字串變數與字串常量的知識點。

字串常量:括在一對雙引號之內的字串行稱為字串常量。例如:」helloworld」,」a」,」abc\n\t」,他們是不可以改變的。例如,char *p=」hello」 如果你試圖改變指標所指向的內容是會報錯的。例如(*p) = 『h』; 執行報錯

因為字串常量是放在靜態儲存區的,這部分內容是不能被修改的。

字串變數,c中沒有這個概念,c中如果想將乙個字串放到變數中,必須用字元陣列,就是用乙個字元型陣列存放乙個字串。例如char data[10] = 「char」;這時它是可以改變的。例如data[0] = 『m』;這種操作時可以的。

使用字串常量的好處:節省記憶體,多個相同的字串常量只需要使用乙個字串就可以了。

常量,字串常量

對於普通變數常量 常量摺疊 是 就是在編譯器進行語法分析的時候,將常量表示式計算求值,並用求 得的值來替換表示式,放入常量表。可以算作一種編譯優化 include void main 輸出 3 2 我只是改了這個位址內容,但是e還是2,因為編譯器在優化的過程中,會把碰見的const全部以內容替換掉 ...

字串常量

1.當乙個字串常量出現於表示式中時,它的值是乙個指標常量。編譯器被這些指定字元的乙份拷貝儲存在記憶體的某個位置,並儲存乙個指向第乙個字元的指標。陣列名用於表示式中時,它的值也是指標常量 2.xyz 1 因為字串常量實際上是個常量指標,這個表示式計算 指標值加上1 的數值。它的結果是個指標,指向字串中...

字串常量

來自 常量字串為什麼位於靜態儲存區?char c chenxi 書上說 chenxi 這個字串被當作常量而且被放置在此程式的記憶體靜態區。那一般的int i 1 1也是常量,為什麼1就不被放置在此程式的記憶體靜態區了呢?請高手指點!所有的字元竄常量都被放在靜態記憶體區 因為字串常量很少需要修改,放在...