为什么下面的 C 代码可以工作?
const char* str = NULL;
str = "test";
str = "test2";
既然str是一个指向常量字符的指针,为什么我们可以给它分配不同的字符串文字呢?此外,我们如何保护str不被修改呢?例如,如果我们后来将 str 分配给一个较长的字符串,而该字符串最终覆盖了内存的另一部分,那么这似乎可能是一个问题。
我应该补充一点,在我的测试中,我在每次赋值之前和之后打印出了 str 的内存地址,并且它从未改变。所以,虽然str是一个指向const char的指针,但内存实际上是被修改的。我想知道这是否是 C 的遗留问题?
您正在更改指针,该指针不是 const (它指向的东西是 const)。
如果您希望指针本身是 const,则声明将如下所示:
char * const str = "something";
or
char const * const str = "something"; // a const pointer to const char
const char * const str = "something"; // same thing
指向非常量数据的常量指针通常不如指向常量的指针有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)