如果我在一個int數組中存儲一個字符,我會看到該字符的ASCII值,但是如果我存儲了任何其他非整數,事情似乎不起作用。當我們在int數組中存儲非整數時會發生什麼?
int a[3]={1,2,'-'};
printf("%d %d %d\n", a[0], a[1], a[2]);
在這裏,我沒有從編譯器得到任何輸出。
這裏發生了什麼?
如果我在一個int數組中存儲一個字符,我會看到該字符的ASCII值,但是如果我存儲了任何其他非整數,事情似乎不起作用。當我們在int數組中存儲非整數時會發生什麼?
int a[3]={1,2,'-'};
printf("%d %d %d\n", a[0], a[1], a[2]);
在這裏,我沒有從編譯器得到任何輸出。
這裏發生了什麼?
C中的字符文字有int
。因此,在此聲明中的所有初始值設定項均爲
int a[3]={1,2,'-'};
具有類型int。
此外,C語言中還有一種所謂的整數提升,它將所有類型爲int的整型的對象提升爲類型爲int的類型。
所以'char c ='a''是一個縮小的轉換? –
@CaptainGiraffe:如果您啓用轉換警告,您確實會收到警告。這實際上是建議的警告之一。 – Olaf
@CaptainGiraffe實際上沒有縮小轉換,因爲整型字面值'a'可以存儲在char類型中。如果你使用了一個變量而不是文字,那麼編譯器可以發出一條診斷信息。 –
沒有非整數!一個_character-constant_ **是**一個'int'。 – Olaf
它將其轉換爲'int' –
'printf'爲您提供執行程序的輸出。 –