p. 754에 참고 부분 내용 밑에
print2DArray((int[2][5]) {{ 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }}, 5, 2);
라고 되어 있는데
print2DArray((int)[2][5] {{ 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }}, 5, 2);
이렇게 (int[2][5]) ㅡ> (int)[2][5]
바꾸지 않고 구분하기 위해 그대로 쓰는 게 맞다고 하셨는데
p.754 참고에 처음 설명에는
① (자료형)[][가로크기]{{값1, 값2, 값3},{값4,값5,값6}}
② (자료형)[세로크기][가로크기]{{값1, 값2, 값3},{값4,값5,값6}}
이라고 되어있는데
그렇다면
print2DArray((int[2][5]) {{ 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }}, 5, 2);
print2DArray((int)[2][5] {{ 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }}, 5, 2);
(int[2][5]) ㅡ> (int)[2][5] 이렇게 바꿔야하는 거 아닌지
이해가 잘 되지 않습니다..
매번 감사합니다.
(int)로 쓰면 오류가 발생합니다.
복합 리터럴을 쓸 수 있다는 참고일 뿐이고, C 언어 코딩에서 거의 안 쓰이는 내용입니다. 그러니 본문이 아니라 <참고>이고요.
2차원 배열은 변수에 담아서 변수로 전달하는 게 보통이고, 복합 리터럴을 만들어서 전달하지는 않으니까요.
C 언어 표준안 6.5.2.5 Compound Literals 항목을 보면...
1차원 배열에 대한 복합 리터럴에서도 int []나 int [2]로 썼습니다. (int)[]나 (int)[2]로 쓰지 않았습니다.
구조체를 인수로 받는 함수의 경우에도 별도로 구조체 변수를 선언하지 않고 복합 리터럴로 전달할 수 있습니다.
저는 저자가 아니므로 (자료형)으로 표기한 이유는 모릅니다.
저자 사이트에 가서 직접 문의하시는 게 좋을 겁니다.
어쨌거나 C 언어 표준에서도 ()는 안 쓰고, 쓰면 Visual Studio에서도 컴파일이 안 됩니다. (int)로 쓰면 (int)로 변환하라는 형변환이 되기 때문에 식이 아닙니다.
Visual Studio에서는 식이 필요하다는 오류 메시지를 표시합니다.
저는 저자의 의도까지는 설명하지 못합니다.
아닌 건 아니고요. ()는 쓰지 마세요. 예제 코드는 올바르게 작성되어 있고, 위에 예시에만 ()를 쓴 건 구분을 위해 쓴 게 아닌가 싶습니다.
참고하세요.