char 與 char 傳字串的區別

2021-07-13 12:42:26 字數 739 閱讀 6134

今天寫**的時候,寫了乙個字串的翻轉,簡單的說就是兩個指標乙個指頭乙個指尾,然後交換兩個指標的內容並讓指標挪動。

void reversestring(char* str)

end--;

while (start < end)

printf("%s", str);

}

就是上面的程式,編譯的時候沒有問題,但是執行的時候,程式在紅字處掛掉了,我用的是vs顯示的是寫入位置錯誤。反覆看了幾遍**,確保程式沒有出錯,

然後看了看我傳的實參,我是這樣傳的:

char* str= "abcdef";

我想了一下,上面的方式,如果執行到了  *end=*start 這一步,因為顯示的是寫入位置錯誤,我想那左值就應該是不能修改的,因為*end此時指向的是字元『a』,

然後我就換了一種傳字串的方式:

char str="abcdef";

結果執行就通過了,雖然執行通過了,但是我還是不太明白這兩個的區別,就查了一些資料。

原因在於兩種方式對字元陣列操作的機制不同。使用char *p="c++"語句後,編譯器

在記憶體的常量區分配一塊記憶體

,儲存」c++「這一字串字面值,然後在棧上分配記憶體儲存p,p的內容為"c++"的位址。p[0]='c'試圖修改常量」c++「,程式當然就會崩潰了。而char s="c++"語句,定義了乙個陣列,編譯器為其在棧上分配了記憶體空間,因而可以進行修改操作。

char 字串和char 字串的理解

一 char 字串 1.如何宣告乙個char 字串 你可以這樣 char str test str是乙個指標,存放在棧區,test 是乙個常量,存放在常量區,vs2017要求這句宣告前面必須加上const,因為它所指向的常量字串是不可更改的 delete str 還可以這樣 char str new...

char 和char 字串的區別

char 指向的字串是存放在常量儲存區,相當於const char 該變數就只是乙個唯讀變數,所以對字串的單個字元無法修改 char存放的字串是存放在棧中,陣列的每個元素是乙個字元,可以對字串的單個字元進行修改操作 在函式void func char p 中,如果傳遞給形參p的實參是char 型別的...

字串陣列char 和字串指標char 的討論

相同點 1.char a 和char a在作為形參的時候完全相同。2.在初始化時,都可以使用常量字串,區別1.內容位址不同 char a abcd 此時 abcd 存放在常量區,然後在棧上分配記憶體給a,並指向 abcd 在常量區的首位址。對於指標本身a來說,它是可變的,允許修改,可以指向其他的位址...