黑马程序员技术交流社区

标题: 求大神指教 [打印本页]

作者: 2014571245    时间: 2014-4-13 15:30
标题: 求大神指教
本帖最后由 2014571245 于 2014-4-19 13:08 编辑

#include<stdio.h>
int main()
{
    char *p="abcdef";
    p[1]='c';
    return 0;
}


这段代码编译、链接是都通过了,为什么运行结果不正确呢?!!!!有图有真相



作者: 于清扬    时间: 2014-4-13 17:11
char a[]="abcdef";用数组定义字符串,存放在栈里面,一般称为字符串变量,里面的字符是可修改的。
char *p="abcdef";用指针定义字符串,存放在常量区里面,一般称为字符串常量,里面的字符是不可修改的。
这里指针p指向的是首字符的地址,在这里就是a,而且如果你再定义一个char *p2=“abcdef”其实指向的还是同一个常量。
p[1]='c';这句等于是在修改一个常量,所以就会报错。
如果你还不明白的话可以看一下c语言基础-复杂数据类型-10指针与字符串,视频里有讲




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2