我正在阅读一段代码,在其中有
#include ...
static char const *program_name;
...
int main(int argc, char** argv){
program_name = argv[0];
...
}
我想知道主函数如何给一个const
变量赋值。任何帮助都将不胜感激!
声明:
static char const *program_name;
说 program_name
是指向常量字符的 (变量) 指针。指针可以改变(因此可以在 main()
中进行赋值),但通过该指针指向的字符串不能通过该指针更改。
与之相比:
static char * const unalterable_pointer = "Hedwig";
static char owls[] = "Pigwidgeon";
static char * const owl_name = owls;
strcpy(owl_name, "Hedwig");
/* owl_name = "Hermes"; */ /* Not allowed */
同时也要与以下内容进行比较和对比:
static char const * const fixed_pointer_to_fixed_data = "Hermes";
这是一个指向常量数据的常量指针。
program_name
是一个指向const char的指针,而不是一个const指针。赋值语句将一个值赋给指针本身,而不是指向的内容。
*program_name
如果按照原始方式声明,即static char const *program_name;
,那么它就是const
的。这是您的意思吗? - AoZ*program_name = 'a';
,因为program_name
指向常量数据;你不能通过这个指针修改数据(尽管其他指向相同数据的指针可能能够修改它——在这种情况下,如果你想要的话,你可以写*argv[0] = 'a';
,尽管我想不出想要这样做的好理由)。 - Jonathan Leffler