2011-01-30 2 views
3

저는 C 2 차원 배열을 채우는 코드에서 제 방식의 오류를 깨달았습니다. 왜이 두 개의 다차원 배열이 유효한 구문처럼 보이지만 예상 한 결과 만 제공하는지 설명하십시오.

은이 같은 어레이 선언 :

실수로 값으로 설정 ..하지만
int myArray[5][5]; 

: 그것은 했어야 있을때 야

*myArray[3,4] = 10; 

:

myArray[3][4] = 10; 

확인 첫 번째 줄은 실수이지만 매우 이상한 결과에도 불구하고 컴파일되고 실행되었습니다. (즉, 나는에 *에서 myArray [3,4], 그것은 있던 잘못된 값의 내용을 인쇄하려고 할 때)

사람이 바로 첫 번째 할당 문은 을 무엇을하고 있는지 설명 할 수 있습니까?

편집 : 나는 원래 사용하려 : 나를 *의 INT 타입으로 int를 할당하는 시도에 대해 컴파일러 오류가 발생했습니다 요식

myArray[3,4] = 10; 

. 나는 아래의 해답에 따라 3,4에서 4로 평가하고 포인터에 4를 추가하려고 시도 했으므로 포인터에 주소를 지정하여 배열에 액세스해야한다고 생각했습니다. (a는 b) B이다 :

답변

7

쉼표 제 espression의 값을 갖는다 http://en.wikipedia.org/wiki/Comma_operator

*myArray[3,4]가 같다 *myArray[4]

+2

이것은'myArray [4] [0]'에 할당하는 효과가 있습니다. –

+0

아니요 * myArray [4] address 10을 할당하는 효과가 없습니다. 아래 회신을 참조하십시오. – Lundin

+1

아니요, Daniel이 맞습니다. * myArray [4]는 int이며 int *가 아닙니다. – Jander

0

* myArray의 [3,4] = 10;

이것은 실수로 C 언어의 "쉼표 연산자"라는 불명확 한 기능을 사용하고 있습니다.이 기능은 왼쪽에서 오른쪽 방향의 표현식을 평가합니다. 이에 대한 세부 사항은 밝히지 않고 3을 건너 뛰고 4를 사용합니다. 컴파일러가 보는 것입니다 :

* myArray [4] = 10;

괜찮은 컴파일러가 있다면 정말 컴파일러 경고를 받아야합니다.

+0

아니요,'myArray [4]'는 myArray [4] [0]'과 동일하고'int'입니다. –

관련 문제