C/C++ code
char
*
m
=
"
hello
"
;
*
(m
+
1
)
=
'
s
'
;
for
(;
*
m
!=
'
\0
'
;m
++
){ printf(
"
%c\n
"
,
*
m); }
但是出運行時錯誤。
----------------------------------------------------------
我用數組下標的方式是可以修改的:
- C/C++ code
-
int i = 0 ; char w[] = " hello " ; w[ 1 ] = ' s ' ; while (w[i] != ' \0 ' ){ printf( " %c\n " ,w[i]); i ++ ; }答復一:char *m = "hello";
"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"保存在棧空間數組里. 數組名為w, 函數名為數組的首地址.
可以通過w[i]='a', 或*(w+i)='a'的形式來修改數組內容.