2013-11-24 101 views
1

這是一個非常快速的問題。 我爲什麼允許這樣做:字符指針數組賦值

char* sentence[2] ={"blahblah","trololo"}; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 

但不是這個?:

char* sentence[2]; 
sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
+0

請考慮是否有多個源文件,每個源文件都包含代碼* outside *以外的函數。當你將它們編譯在一起時,你會期望所有代碼執行的時間(以及以何種順序)? – dreamlax

回答

3

您不允許執行第二部分任務,因爲任務不在函數中。當您將分配到main()(或其他功能),這將是有效

char* sentence[2]; 
int main() { 
    sentence[0] = "blahblah"; 
    sentence[1] = "trololo"; 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
0

我爲什麼允許這樣做:

char* sentence[2] ={"blahblah","trololo"}; 

初始化被允許爲全局變量。

但不是這個?:

的陳述

sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 

使得功能(main())外沒有任何意義。將它們移到該函數內部,它將起作用。

+0

Downvoters關心解釋! – haccks

+0

我不反對downvoting(每次)。如果這是值得的,我歡迎對我的答案贊成低估,但我反對沒有任何評論的低估。這是一個很糟糕的做法。 – haccks

-3

對不起我沒有以正確的方式讀取的問題,我沒有看到函數main()

代碼工作每次都在功能裏面。函數必須被調用!主要由系統調用。所以這個代碼是無法實現的。

你可以從函數中取出全局變量(例如costant)或結構體。

+0

爲什麼不能這樣工作? – dreamlax