请教c++字符串指针常量问题

chara[6]="TEST!";char*constpc=a;*(a+1)='c';可以正常编译执行。但是char*constpc=“TEST!";*(a+1)='c'... char a[6] ="TEST! ";
char * const pc =a;
*(a+1)='c';
可以正常编译执行。但是
char * const pc =“TEST!";
*(a+1)='c';
可以编译,但是运行就崩掉,请问是什么原因?
上面三行和下面两行是对比关系,就是用上面三行的方式可以编译、执行,用下面两行的方式,可以编译,无法运行。
展开
 我来答
otejlu
2011-03-10
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部
bcdef";
同样str存的也是这个char数组的指针,但是cout<<str;时,也会输出abcdef

p存的是字符串首地址没错
字符串的几个不同层面的含义

1、源文件中出现的 "abc" 这样的字符串
这种叫做字符串字面常量,只在代码中有效。这种字面常量具有内部链接性,编译器会在每个编译单元内部为这个字符串分配空间存储。因为是常量,它所位于的内存空间通常是不可写的。

2、一个以 '\0' (ASCII NUL字符)结束的字符数组。或者更确切的说,一个包含了各种 ASCII 可打印字符的、以 '\0' 为结束的字符数组。这是 C 语言语义上的字符串定义,不涉及编译、链接的特性,但是 <string.h>和<stdio.h> 头文件中的诸多函数都是以次为依据进行处理的。strlen / strcpy / strdup 等函数在进行识别字符串的时候,只依照是否出现 '\0' 为判断条件。

字符数组,char CHARRAY[arraysize],是一个更低层面上的意义,它表示一块连续的、包含 char 类型元素的内存区间。其中的内容是否是合法的 ASCII 字符串,是否以 '\0' 结束,并不影响它作为一个字符数组的本质。当这个数组作为局部变量或者全局变量进行分配的时候,可以使用 sizeof 操作符得到整个数组所占据的空间。这个值与其中包含的字符串的 strlen 不必须相同,通常情况下也是不会相等的。

字符指针,char *,表示一个指向 char 类型元素的指针。对它进行解除引用得到的是单个的 char。由于 C 语言支持指针算术运算(对 char *p 支持 ++p; --p; p + 2 等操作),可以通过一个 char * 方便地访问连续范围的字符串,因此通常使用 char * 来引用一个逻辑意义上的字符串。
北丹丹0cg
2011-03-09 · TA获得超过639个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:283万
展开全部
按我的理解:上面的const是指向指针的,那个a不能修改,字符串能改
下面那个const是指向字符串的,字符串不能改
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
斐兹骏骑
2011-03-09
知道答主
回答量:24
采纳率:0%
帮助的人:18.1万
展开全部
下面的两行和上面的三行什么关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式