2013-01-11 99 views
9

我读一段代码,其中存在初始化静态字符常量* somevar

#include ... 

static char const *program_name; 

... 
int main(int argc, char** argv){ 
program_name = argv[0]; 

... 
} 

我想知道如何能的主要功能将值分配给一个const变量。任何帮助,将不胜感激!

回答

12

声明:

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"; 

这是一个常数数据的常量指针。

+0

感谢其他两个例子!然后我想,'* program_name'是'const'如果在原来的方式声明,即'静态字符常量*程序名;'。这是你的意思吗? – AoZ

+0

正确。你不能写'*程序名=“A”;''因为点program_name'恒定的数据;你不能通过这个指针修改数据(虽然其他指针相同的数据或许可以修改它 - 在这种情况下,你可以写'* argv的[0] =“A”;'如果你想,虽然我没有想到要这样做的好理由)。 –

7

program_name是为const char,不是一个常量指针的指针。赋值语句为指针赋值而不是指向对象。

+0

你的回答也有道理,但我更喜欢乔纳森的详细说明。不过,谢谢! – AoZ