2013-01-11 100 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