다차원 어레이 초기화
오늘 C++ 테스트에서 다음과 같은 질문을 보았습니다.
어레이 지정 int Multi[2][3][2] = {14,11,13,10,9,6,8,7,1,5,4,2}
의 가치는 무엇입니까? Multi[1][1][0]
?
3차원 어레이는 다음과 같이 초기화해야 합니다.{{{},{}},{{},{}},{{},{}}}
? 이러한 단위가 있는 요소의 값을 어떻게 찾을 수 있습니까?그것은 너무 헛갈려요.
두 가지 방법으로 어레이를 초기화할 수 있지만 가독성이 향상되므로 이너브래셔를 곱슬곱슬하게 사용하는 것이 좋습니다.
중괄호로 포맷되지 않은 다차원 배열 요소의 값을 찾는 가장 쉬운 방법은 배열을 분할하는 것입니다.예를 들어 어레이의 치수는 2x3x2 입니다.
먼저 어레이를 2세트(2x3x2)로 분할
{14,11,13,10,9,6,8,7,1,5,4,2} --> {{14,11,13,10,9,6}, {8,7,1,5,4,2}}
그런 다음 각 세트를 3세트(2x3x2)로 분할합니다.
{{14,11,13,10,9,6},{8,7,1,5,4,2}} --> {{{14,11}, {13,10} ,{9,6}}, {{8,7}, {1,5}, {4,2}}}
보다 작은 세트(2x3x2)마다 2개의 요소가 남아 있기 때문에 어레이를 중괄호로 포맷했습니다.
이제 인덱스를 사용하여 요소의 값을 쉽게 찾을 수 있습니다.[1][1][0]
이 요소는 큰 집합의 두 번째([1][1][0])이므로 작은 집합의 첫 번째([1][1][0]) 요소이므로 정답은 1입니다.
단, 이러한 시험문제는 기본적인 초기화 규칙을 가르치는 것보다 프로그래밍 언어 구문을 남용하는 것에 더 관심이 있는 선생님의 전문성이 결여되어 있음을 보여줍니다.
풀 스코어를 얻을 수 있는 정답은, 「모든 경고가 유효하게 되어 있는 코드 컴파일」입니다.이렇게 엉터리 코드를 쓰는 일은 없습니다.
gcc test.c -std=c11 -pedantic-errors -Wall -Wextra
test.c: In function 'main':
test.c:6:3: warning: missing braces around initializer [-Wmissing-braces]
int Multi[2][3][2] = {14,11,13,10,9,6,8,7,1,5,4,2};
^
단, 당신의 선생님은 코드가 엉망이 되는 것에 대해 크게 염려하지 않고, Brace 리스트가 초기화 대상 구조와 일치하지 않더라도 어레이(및 구조)를 초기화할 수 있는 C언어로 된 세부사항을 찾고 있는 것 같습니다.
C언어에 관한 한int Multi[2][3][2] = {14,11,13,10,9,6,8,7,1,5,4,2}
는 다음과 완전히 동일합니다.
// properly written initialization list for a 3D array
int Multi[2][3][2] =
{
{
{14, 11},
{13, 10},
{ 9, 6}
},
{
{ 8, 7},
{ 1, 5},
{ 4, 2}
}
};
첫 번째 형식이 허용되는 유일한 이유는 다음과 같은 것을 쓸 수 있기 때문입니다.
int Multi[2][3][2] = {0};
첫 번째 요소를 0으로 명시적으로 초기화하고 나머지 요소를 정적 저장 기간(0도)인 것처럼 초기화합니다.즉, 모든 요소가 0으로 설정됩니다.
이런 거 쓰는 거int Multi[2][3][2] = {14,11,13,10,9,6,8,7,1,5,4,2}
C언어를 남용하고 있습니다.그것은 매우 나쁜 습관이다.그렇게 하는 것은 MISRA-C 등에 의해 금지되어 있다.
좋은 교사는 난독화된 난센스 코드를 해석하는 대신 모든 컴파일러 경고를 활성화하는 방법과 다차원 배열을 올바르게 초기화하는 방법을 가르쳐야 합니다.
int Multi [2][3][2] = {14,11,13,10,9,6,8,7,1,5,4,2};
멀티[2][3][2]의 메모리 맵은 ->
다중[0][0][0]=14;
복수[0][0][1]=11;
복수[0][1][0]=13;
복수[0][1][1]=10;
복수[0][2][0]=9;
복수[0][2][1]=6;
복수[1][0][0]=8;
복수[1][0][1]=7;
[1][1][0]=1;
복수[1][1][1]=5;
복수[1][2][0]=42;
복수[1][2][1]=2;
따라서 Multi[1][1][0]=1의 값은 매우 간단합니다.
이렇게 초기화할 수도 있습니다.
int Multi[2][3][2] = {{{14,11},{13,10},{9,6},{8,7},{1,5},{4,2}};
언급URL : https://stackoverflow.com/questions/30350699/multi-dimensional-array-initialization
'programing' 카테고리의 다른 글
"Java Concurrency In Practice"는 아직 유효합니까? (0) | 2022.08.03 |
---|---|
스택 트레이스란 무엇입니까?어플리케이션오류를 디버깅하려면 어떻게 해야 하나요? (0) | 2022.08.03 |
Netlify 형식의 Vue 앱이 이벤트에 오류 바인딩을 발생시킵니다. (0) | 2022.08.02 |
문자 집합 이름이 상수가 아닌 이유는 무엇입니까? (0) | 2022.08.02 |
API 가져오기 요청을 디스패치하는 데 가장 적합한 라이프 사이클 훅은 무엇입니까? (0) | 2022.08.02 |