C语言中指向字符串常量的指针问题

 我来答
辉颂歧祖
2019-09-15 · TA获得超过3万个赞
知道大有可为答主
回答量:1.2万
采纳率:29%
帮助的人:916万
展开全部
定义成字符数组的时候,数组名就是指向数组的首地址的指针,数组在一串连续的地址中,当执行复制向后移动指针的时候会依次读取字符,没问题,但是如果是指针,它指向的是在静态区的一串字符串的首地址,你要把指针向后移动,他的下一个指针指向何处就是个问题了,也就是你访问了不属于你的内存地址,所以出错了!!!
风丁庆旭
2020-05-05 · TA获得超过3593个赞
知道大有可为答主
回答量:3122
采纳率:30%
帮助的人:192万
展开全部
第一个:char
*p
=
"123456";
char
*s
=
"asdghh";
*s
=
*p;
你这个之所以会错,是因为指针s指向的是常量字符串
asdghh
而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char
a[]="123456";//这个的意思是
在内存充开辟空间
把常量字符串复制到这个空间
char
*p
=
a;//这个说明指针p存储的是数组变量a的地址
char
a1[]="asdghh";
//同上
char
*s
=a1;
//同上
*s
=
*p;
//
这句的意思是
把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
友俊良祁松
2019-11-16 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:673万
展开全部
的确字符串常量是不能修改的,但是编译器并不认为p[0]='x'有任何错误,所以它编译的时候没有问题都,连接也不会有问题,但是运行的时候一定会出错。
也就是能弹一个内存错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
潭睿达市清
游戏玩家

2019-02-11 · 游戏我都懂点儿,问我就对了
知道大有可为答主
回答量:1.2万
采纳率:35%
帮助的人:902万
展开全部
注意:你这个问题是个特例,在C语言里实际上是可以修改的,且在
TC
下可以通过。如果你用VC,你将不会通过编译。
如果你不想修改它可以加个
const,如:
const
char
*p
=
"hello";
这样就不会编译通过了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式