为什么用C编写的以下代码可以正常工作?
const char* str = NULL;
str = "test";
str = "test2";
既然str是一个指向常量字符的指针,为什么我们可以给它分配不同的字符串文字呢?此外,我们如何保护str不被修改?这似乎是一个问题,例如,如果我们后来将str分配给一个更长的字符串,而这个字符串最终覆盖了内存的另一部分。
我应该补充说,在我的测试中,我在每次赋值之前和之后打印出了str的内存地址,并且它从未改变过。因此,尽管str是指向常量字符的指针,但内存实际上正在被修改。我想知道这是不是C的遗留问题?
发布于 2009-01-13 19:13:08
您正在更改指针,它不是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
指向非常量数据的常量指针通常比指向常量的指针更不有用。
发布于 2009-01-13 19:12:01
字符串字面量的内存是在堆栈上分配的,您的所有赋值操作都是将str
指针更改为指向这些内存地址。它最初指向的常量字符根本没有改变。
发布于 2009-01-13 19:18:07
你要找的可能是语法...
const char* const str = NULL;
str = "test";
str = "test2";
请注意char*后面的"const“,它会在尝试编译/构建时产生编译器错误。
https://stackoverflow.com/questions/440331
复制相似问题