C语言用指针形式初始化字符串数组时为什么要用const,用了会会怎样,可以不用吗?(+_+)?

constchar*string1;constcharstring2[];... const char *string1;
const char string2[];
展开
 我来答
百度网友c608345
2019-02-13 · 超过21用户采纳过TA的回答
知道答主
回答量:51
采纳率:83%
帮助的人:19万
展开全部
1 可以不用const,例如:
char aa[] = "abc";
aa[0] = 'd';
printf("%s\n", aa); //这里打印的结果是dbc,aa的大小是4,abc+一个\0
2 const char *aa = "abc";
aa[0] = 'd'; //这个时候是错误的,因为aa是一个指针,指向一个字面常量“abc”,这个字面常量是保存在程序的全局静态数据区,不可更改,默认就是const的,所以char *aa = "abc";是错误的。
3 const char aa[] = "abc";
aa[0] = 'd'; //这里也会报错,因为是const的aa指向的值不可更改。
const char *aa = "abc";
aa = "bcd"; //正确,const 类型 * ptr = value,这样的指针,指向的值不可变,但是指针本身可以重新指向其他地方。
4 怎么才能更改const char aa[] = "abc";中“abc”的值呢?这个时候aa指向的内存在程序的全局内存上(aa是在全局变量)或者在栈内存上(aa是局部变量),非全局静态数据区,所以我们可以强制转换:
const char aa[] = "abc";//但是const char *aa = "abc";这种情况不行,语法没有问题,运行报错,操作系统应该会对静态数据区做保护。
printf("%s %d\n", aa, sizeof(aa));
int bb = (int)aa;
char *ptr = (char*)bb;
ptr[0] = 'd';
printf("%s\n", aa);
阳光的雷咩咩
2019-02-13 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7885万
展开全部
避免后面被修改呗。更安全。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式