指向字符串的指针为何不能用来修改此字符串(c语言)
(2013-01-05 13:51:01)
我原本打算使用指向一个字符串的指针来修改这个字符串,代码如下:
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:
1
2
3
4
5
|
char
*m
"hello"
;
*(m+1)
's'
;
for
(;*m
'\0'
;m++){
printf
(
"%c\n"
,*m);
}
|
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:
1
2
3
4
5
6
7
8
|
int
i
char
w[]
"hello"
;
w[1]
's'
;
while
(w[i]
'\0'
){
printf
(
"%c\n"
,w[i]);
i++;
}
char
char
可以通过w[i]='a',
字符串“hello”本身就是一个常量字符指针,
而对于指针m,无非就是一个地址的拷贝,也就是“hello”地址的拷贝。
相当于m指向一个字符串常量,字符串常量是不予许改变的!
而对于w[]来说就不一样了,
虽然hello本身是常量,不过此时拷贝给w[]的不是地址,而是内容,也就是“hello”,
也就是w本身拥有一个自己的hello副本,可以对其进行想要的合法操作,比如改变等!!
|