指向字符串的指针为何不能用来修改此字符串(c语言)http://blog.sina.com.cn/s/blog_68ff96b70101him1.html

指向字符串的指针为何不能用来修改此字符串(c语言)

  (2013-01-05 13:51:01)
标签: 

杂谈

分类: c/cpp
我原本打算使用指向一个字符串的指针来修改这个字符串,代码如下:
C/C++ code
?
1
2
3
4
5
char  *m  "hello" ;
     *(m+1)  's' ;
     for (;*m !=  '\0' ;m++){
         printf ( "%c\n" ,*m);
     }

但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:
C/C++ code
?
1
2
3
4
5
6
7
8
int  0;
     char  w[]  "hello" ;
     w[1]  's' ;
     
     while (w[i] !=  '\0' ){
         printf ( "%c\n" ,w[i]);
         i++;
     }
char *m "hello";<=>const char*m="hello";
char *m "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.

char w[] "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容. 字符串“hello”本身就是一个常量字符指针,
而对于指针m,无非就是一个地址的拷贝,也就是“hello”地址的拷贝。
相当于m指向一个字符串常量,字符串常量是不予许改变的! 而对于w[]来说就不一样了,
虽然hello本身是常量,不过此时拷贝给w[]的不是地址,而是内容,也就是“hello”,
也就是w本身拥有一个自己的hello副本,可以对其进行想要的合法操作,比如改变等!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值