在C中重新定义const char *

时间:2017-12-11 09:34:16

标签: c const

C中假设以下代码:

const char * string = "123";
if(condition) string = "somethingelse";

printf("%s\n", string);

虽然我知道它正在工作(至少在gcc上有x86_64并且没有生成编译器警告,但我想知道这是否应该像这样或者如果有一个更好的选择。

请注意,此问题与Difference between char* and const char*?不重复,因为它明确询问是否重新定义变量内容是一种良好做法。另一个问题是要求char*const char*之间的区别,并且如果已经知道另一个值的分配意味着什么,则接受的答案仅提供答案。这对我来说不清楚,并且是这个问题的必要条件。

2 个答案:

答案 0 :(得分:2)

没关系,指针只是重新分配了一个新值,它也是const char *类型。

如果您希望指针本身也保持不变(这在我看来有助于清晰),您可以这样做:

const char * const string = condition ? "somethingelse" : "123";

这使得string具有“常量char的常量指针”类型,因此您无法重新分配它(或者更改它指向的数据)。

答案 1 :(得分:1)

如果您正在撰写本文,请使用C语言:

const char* string = "123";

然后string是指向const char数组的指针。指针本身不是常量,因此您可以修改指针。

如果要将指针设为const:

const char* const string = "123";

然后你无法改变它。