关于字符串指针不可修改的问题
生活随笔
收集整理的這篇文章主要介紹了
关于字符串指针不可修改的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C/C++ code
char*m ="hello"; *(m+1) ='s'; for(;*m !='\0';m++){ printf("%c\n",*m); }
但是出運行時錯誤。
----------------------------------------------------------
我用數組下標的方式是可以修改的:
"hello"保存在靜態數據區,該數據不能修改.
由指針m指向. 不能通過指針m來修改靜態數據區的值.
char w[] = "hello";
"hello"保存在棧空間數組里. 數組名為w, 函數名為數組的首地址.
可以通過w[i]='a', 或*(w+i)='a'的形式來修改數組內容. 疑問: 這種說法是錯誤的。如下: ?static int a = 10;
?int *b = &a;
?*b = 20;
?cout<<a<<endl; 輸出結果為20.我們依然通過指針修改了存儲在靜態存儲區里的數據源。 //--------------------------------------------------- 答復二: 字符串“hello”本身就是一個常量字符指針,而對于指針m,無非就是一個地址的拷貝,也就是“hello”地址的拷貝,相當于m指向一個字符串常量,字符串常量是不予許改變的!
而對于w[]來說就不一樣了,雖然hello本身是常量,不過此時拷貝給w[]的不是地址,而是內容,也就是“hello”,也就是w本身擁有一個自己的hello副本,可以對其進行想要的合法操作,比如改變等!! 回復三: char *m = "hello";
"hello"保存在文字常量區,該數據不能修改,默認有只讀屬性.
由指針m指向. 不能通過指針m來修改此值.
char w[] = "hello";
"hello"保存在??臻g數組里. 數組名為w, 函數名為數組的首地址.
可以通過w[i]='a', 或*(w+i)='a'的形式來修改數組內容.
轉載于:https://www.cnblogs.com/CBDoctor/archive/2012/09/27/2705776.html
總結
以上是生活随笔為你收集整理的关于字符串指针不可修改的问题的全部內容,希望文章能夠幫你解決所遇到的問題。