2016-11-20 100 views
-3

如果我在一個int數組中存儲一個字符,我會看到該字符的ASCII值,但是如果我存儲了任何其他非整數,事情似乎不起作用。當我們在int數組中存儲非整數時會發生什麼?

int a[3]={1,2,'-'}; 
printf("%d %d %d\n", a[0], a[1], a[2]); 

在這裏,我沒有從編譯器得到任何輸出。

這裏發生了什麼?

+0

沒有非整數!一個_character-constant_ **是**一個'int'。 – Olaf

+0

它將其轉換爲'int' –

+0

'printf'爲您提供執行程序的輸出。 –

回答

1

C中的字符文字有int。因此,在此聲明中的所有初始值設定項均爲

int a[3]={1,2,'-'}; 

具有類型int。

此外,C語言中還有一種所謂的整數提升,它將所有類型爲int的整型的對象提升爲類型爲int的類型。

+0

所以'char c ='a''是一個縮小的轉換? –

+0

@CaptainGiraffe:如果您啓用轉換警告,您確實會收到警告。這實際上是建議的警告之一。 – Olaf

+0

@CaptainGiraffe實際上沒有縮小轉換,因爲整型字面值'a'可以存儲在char類型中。如果你使用了一個變量而不是文字,那麼編譯器可以發出一條診斷信息。 –

相關問題