2012-04-05 5 views
1

나는 C에서 초보자를 그리고 난 같은 코드가 있습니다이이 같은 값 뭔가 인쇄배열 인덱스의 문자 표현은이 경우 어떻게 작동합니까?

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

:

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

-1074223011 

을하지만을 나는 문을 변경할 때

정확하게 값을 인쇄하고 있습니다.

6 

제대로 작동하려면 인덱스에 -0을 추가해야하는 이유가 궁금합니다. 그리고 왜 그냥 ++ndigit['9']을 언급하면 ​​도움이되지 않습니까?

미리 감사드립니다. 당신이 배열의 10 번째 요소에 액세스하려면

+0

코드가 컴파일되지 않습니다 .... –

+7

힌트 : ''9 '! = 9'. ''9 '== 57'. – cHao

+1

'9'는 57 일 필요는 없습니다. 두 경우 모두 ndigit이 다시 선언되어 코드가 컴파일되지 않습니다. – Wiz

답변

6

, 당신이 할 :

array[9] 

당신이 수 9 + 1 상수 문자의 값을 갖는 인덱스에있는 요소에 액세스하려면 , 당신이 할 :

array['9'] 

방식으로 인해 ASCII로 정의된다 (C에서 사용하는 모든 다른 문자 인코딩 방식, 위즈의 의견을 참조), 식 '9' - '0' 실제로이 경우에 당신을 혼동 할 수있는 9 같습니다.

+0

사실, C, '9'- '0'이 사용하는 모든 문자 인코딩 체계는 9와 같아야합니다. 표준은 다음을 보장합니다. "원본 및 실행 기본 문자 집합 모두에서 값 위의 10 진수 목록에서 0 이후의 각 문자의 값은 이전 값보다 큰 값이어야합니다. " (그것이 말하는 목록은 0 1 2 3 4 5 6 7 8 9입니다). – Wiz

+0

이 코드는 왜 실행되고 결과를 주는가? ... 바운드 메모리 영역을 벗어나 액세스하려고 시도하고 있는가? 그 전에는 충돌해야합니까? – TutuGeorge

+0

아, 네. 나는 그것을 답변에 추가 할 것이다. 고마워. –

관련 문제