A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2014571245 中级黑马   /  2014-4-13 15:30  /  1049 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 2014571245 于 2014-4-19 13:08 编辑

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


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


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

1 个回复

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

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马