当前位置:  开发笔记 > 编程语言 > 正文

为什么我可以更改const char*变量的值?

如何解决《为什么我可以更改constchar*变量的值?》经验,为你挑选了2个好方法。

为什么C中的以下代码有效?

const char* str = NULL;
str = "test";
str = "test2";

由于str是指向常量字符的指针,为什么我们允许为它分配不同的字符串文字?此外,我们如何保护str不被修改?看起来这可能是一个问题,例如,我们后来将str分配给一个更长的字符串,最后写入另一部分内存.

我应该补充一点,在我的测试中,我在每个作业之前和之后打印出str的内存地址,但它从未改变过.因此,尽管str是指向const char的指针,但内存实际上正在被修改.我想知道这可能是C的遗留问题吗?



1> Michael Burr..:

你正在改变指针,它不是const(它指向的东西是const).

如果您希望指针本身为const,则声明将如下所示:

char * const str = "something";

要么

char const * const str = "something";  // a const pointer to const char
const char * const str = "something";  //    same thing

指向非const数据的const指针通常是一个不如指针到const的有用构造.



2> Matthew Crum..:

此外,我们如何保护str不被修改?

char * const str1; // str1 cannot be modified, but the character pointed to can
const char * str2; // str1 can be modified, but the character pointed to cannot
const char * const str3 // neither str3 nor the character pointed to can be modified.

读取此内容的最简单方法是从变量名称开始并向左读取:

STR1是一个常量蚂蚁指针 ACTER

STR2是一个指针 ACTER const的蚂蚁

STR3是一个常量蚂蚁指针 ACTER const的蚂蚁

注意:从右到左的读数在一般情况下不起作用,但对于简单的声明,这是一种简单的方法.我发现了一个基于"C编程语言"代码的java applet,它可以解释声明,并详细说明如何进行.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有