分享

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

 XX_YY_ZZ 2015-10-22
使用指向一个字符串的指针来修改这个字符串,代码如下:
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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多