char s1和char s2 的區別

2021-06-29 14:35:09 字數 746 閱讀 5411

對於下面的**,說法正確的是____。

char* s1 = "hello world";

char s2 = "hello world";

s1[2] = 'e';     // 1

s2[2] = 'e';     // 2

*(s1 + 2) = 'e';  // 3

*(s2 + 2) = 'e';  // 4 · 

語句2、

4是非法的 · 

語句3、

4是非法的 · 

語句1、

3是非法的 · 

僅語句1

是非法的 · 

僅語句2

是非法的 · 

語句1~

4都是合法的

上面的題我們選擇第三項。
下面我們來詳細分析一下。首先這兩者有很大區別。

char *s1="hello world"這個是乙個字串常量,你可以像乙個字元陣列一樣使用它,但是你不能更改這個字串的值,比如 s1[2]='e'這樣不合法。

char s2="hello world";是乙個字串變數,可以被修改,s2 是函式的棧空間區域,函式執行完成,這個空間就沒了。

然而,這兩者在作函式的形參的時候是完全等價的。
void function(char *s1);

void function(char s1);

可以相當絕對的說這兩種完全等價,沒有任何區別。

char s1 與 char s2 的區別

今天看到如下 char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 endl 輸出什麼?...

char s 和 char s 的區別

char d hello 中的a是指向第乙個字元 a 的乙個指標 char s 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標。現執行下列操作 strcat d,s 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法修的。而陣列是存放在...

char s 和 char s 的區別

最近的專案中有不少c的程式,在與專案新成員的交流中發現,普遍對於char s1 和 char char s1 hello char s2 hello 區別所在 char s1 的s1,而指標是指向一塊記憶體區域,它指向的記憶體區域的大小可以隨時改變,而且當指標指向常量字串時,它的內容是不可以被修改的...