在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*
之间的区别,并且如果已经知道另一个值的分配意味着什么,则接受的答案仅提供答案。这对我来说不清楚,并且是这个问题的必要条件。
答案 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";
然后你无法改变它。