2012-04-05 20 views
1

我在C初學者,我有這樣的代碼:在這種情況下,數組索引中的字符表示如何工作?

#include <stdio.h> 
main() 
{ 
    int i; 
    int ndigit[10] = { [9] = 5 }; 
    printf("%d\n",++ndigit['9']); 
} 

這將輸出值是這樣的:

-1074223011 

但是,當我改變聲明:

++ndigit['9'-'0'] 

正確打印值

6 

我想知道爲什麼需要在我的索引中添加-0以使其正常工作?而爲什麼只是提到++ndigit['9'],不幫我?

在此先感謝。

+0

該代碼不編譯.... – 2012-04-05 05:41:51

+7

提示:''9'!= 9'。 ''9'== 57'。 – cHao 2012-04-05 05:43:33

+1

'9'不必等於57.在任何情況下,ndigit都被重新聲明,以便代碼不會被編譯。 – Wiz 2012-04-05 05:44:05

回答

6

如果您要訪問的10數組中的元素,你這樣做:

array[9] 

如果你想擁有的字符常量人數爲9 + 1的值索引來訪問元素,你這樣做:

array['9'] 

由於方式ASCII(由C中,所有其它字符編碼方案,看到奇才的評論)的定義,表達'9' - '0'實際上等於9,這可能混淆你在這種情況下。

+0

實際上,C使用的每個字符編碼方案'9' - '0'必須等於9.標準保​​證:「在源和執行基本字符集中,值在上面的十進制數字列表中的0之後的每個字符的值應該大於前一個值的值。「 (它所談論的清單是0 1 2 3 4 5 6 7 8 9)。 – Wiz 2012-04-05 05:56:19

+0

爲什麼這段代碼執行並給出結果?......它試圖訪問一些超出內存區域的權限?它應該在這之前崩潰? – TutuGeorge 2012-04-05 05:56:46

+0

啊,整齊。我會將其添加到答案中,謝謝。 – 2012-04-05 05:56:54

相關問題