- Part2- 제 2 장다차원배열이란무엇인가
학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조
2.1 다차원배열이란
2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3] 면행열 3 열 3 열 2 행 12 행 4 행 2 행 48 바이트 == 4 * 4 * 3 3 열 48 바이트 == 4 * 12 48 바이트 == 4 *2 * 2 * 3
2 차원배열의선언 ü 자료형 : 배열의자료형을지정 2.1 다차원배열이란 (2/14) ü 배열이름 : 변수이름과마찬가지로배열을구분하는배열의이름 ü 배열길이 : 배열요소의길이를행 ( 가로 ) 과열 ( 세로 ) 로지정
2.1 다차원 배열이란 (3/14) 2차원 배열의 선언 ü 행과 열을 지정 #include <stdio.h> int main(void) { // 2차원 배열의 선언 int array[4][3]; return 0; }
2.1 다차원배열이란 (4/14)- - - [2-1.c 실습 ] #include<stdio.h> int main(void) { // 2 차원배열의선언 int array[4][3]; // 4 행 3 열의배열길이선언 } array[0][0]=1; array[0][1]=2; array[0][2]=3; array[1][0]=4; array[1][1]=5; array[1][2]=6; array[2][0]=7; array[2][1]=8; array[2][2]=9; array[3][0]=10; array[3][1]=11; array[3][2]=12; prini("%d %d %d \n",array[0][0], array[0][1], array[0][2]); // 0 행출력 prini("%d %d %d \n",array[1][0], array[1][1], array[1][2]); // 1 행출력 prini("%d %d %d \n",array[2][0], array[2][1], array[2][2]); // 2 행출력 prini("%d %d %d \n",array[3][0], array[3][1], array[3][2]); // 3 행출력 return 0;
2.1 다차원 배열이란 (5/14)- - - [2-1.c 분석] int array[4][3]; array[0][0]=1; array[0][1]=2; array[0][2]=3; // 0행의 배열 요소들에 데이터 저장 array[1][0]=4; array[1][1]=5; array[1][2]=6; // 1행의 배열 요소들에 데이터 저장 array[2][0]=7; array[2][1]=8; array[2][2]=9; // 2행의 배열 요소들에 데이터 저장 array[3][0]=10; array[3][1]=11; array[3][2]=12; // 3행의 배열 요소들에 데이터 저장
2.1 다차원배열이란 (6/14)- - - [2-2.c 실습 ] #include<stdio.h> int main(void) { // 2 차원배열선언과동시에데이터저장 ( 초기화 ) int array1[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int array2[4][3]={1,2,3,4,5}; // 2 차원배열 array1 의데이터출력 prini("%d %d %d \n",array1[0][0], array1[0][1], array1[0][2]); // 0 행출력 prini("%d %d %d \n",array1[1][0], array1[1][1], array1[1][2]); // 1 행출력 prini("%d %d %d \n",array1[2][0], array1[2][1], array1[2][2]); // 2 행출력 prini("%d %d %d \n",array1[3][0], array1[3][1], array1[3][2]); // 3 행출력 prini("- - - - - - - - - - - - - - - - - - - - \n"); // 2 차원배열 array2 의데이터출력 prini("%d %d %d \n",array2[0][0], array2[0][1], array2[0][2]); // 0 행출력 prini("%d %d %d \n",array2[1][0], array2[1][1], array2[1][2]); // 1 행출력 prini("%d %d %d \n",array2[2][0], array2[2][1], array2[2][2]); // 2 행출력 prini("%d %d %d \n",array2[3][0], array2[3][1], array2[3][2]); // 3 행출력 return 0; }
2.1 다차원 배열이란 (7/14)- - - [2-2.c 분석]
2.1 다차원배열이란 (8/14)- - - [2-3.c 실습 ] #include<stdio.h> int main(void) { int array1[4][3]={{1,2},{3},{4},{5}}; int array2[4][3]={{1,2,3},{4,5,6},{7,8,9},{10}}; } prini("%d %d %d \n",array1[0][0], array1[0][1], array1[0][2]); prini("%d %d %d \n",array1[1][0], array1[1][1], array1[1][2]); prini("%d %d %d \n",array1[2][0], array1[2][1], array1[2][2]); prini("%d %d %d \n",array1[3][0], array1[3][1], array1[3][2]); prini("- - - - - - - - - - - - - - - - - - - - \n"); prini("%d %d %d \n",array2[0][0], array2[0][1], array2[0][2]); prini("%d %d %d \n",array2[1][0], array2[1][1], array2[1][2]); prini("%d %d %d \n",array2[2][0], array2[2][1], array2[2][2]); prini("%d %d %d \n",array2[3][0], array2[3][1], array2[3][2]); return 0;
2.1 다차원 배열이란 (9/14)- - - [2-3.c 분석] // 행 단위로 2차원 배열의 선언 과 동시 초기화
2.1 다차원 배열이란 (10/14)- - - [2-4.c 실습] #include<stdio.h> int main(void) { // 2차원 배열의 선언 int array[2][2]; int i,j; // 2차원 배열에 데이터 입력 for(i=0;i<2;i++) { for(j=0; j<2; j++) { prini("정수를 입력하세요: "); scanf("%d", &array[i][j]); } } //2차원 배열에 데이터 출력 for(i=0;i<2;i++) { for(j=0; j<2; j++) { print("%3d",array[i][j]); } prini("\n"); } return 0; }
2 차원배열선언시주의사항 ü 열의길이는반드시설정 2.1 다차원배열이란 (11/14) int array1[ ][ ]={1, 2, 3, 4, 5, 6,,7,8,9, 10, 11, 12}; // 에러 int array2[4][ ]={1, 2, 3, 4, 5, 6,,7,8,9, 10, 11, 12}; // 에러 int array3[ ][3]={1, 2, 3, 4, 5, 6,,7,8,9, 10, 11, 12}; // 정상 int array 4[ ][4]={1, 2, 3, 4, 5, 6,,7,8,9, 10, 11, 12}; // 정상 int array5[ ][2]={1, 2, 3, 4, 5, 6,,7,8,9, 10, 11, 12}; // 정상
2.1 다차원배열이란 (12/14) 2 차원배열의물리적메모리구조 int array1[2][3] = {1, 2, 3, 4, 5, 6}; array[0][0] array[0][1] array[0][0] array[0][1] array[0][2] array[0][2] array[1][0] array[1][1] array[1][2] 이렇게이해하자! array[1][0] array[1][1] array[1][2] 2 차원메모리구조 물리적메모리구조
3 차원배열의이해 2.1 다차원배열이란 (13/14)
2.1 다차원배열이란 (14/14)- - - [2-5.c 실습 ] int i, j, k; int array[3][3][3]={ {1,2,3,4,5,6,7,8,9}, {10,11,12,13,14,15,16,17,18}, {19,20,21,22,23,24,25,26,27} }; for(i=0; i<3; i++) // 0 면, 1 면, 2 면 { for(j=0; j<3; j++) // 0 행, 1 행, 2 행 { for(k=0; k<3; k++) // 0 열, 1 열, 2 열 { print("%d ", array[i][j][k]); } print("\n"); } print("- - - - - - - - - - - - - - - \n"); }
2.2 2 차원배열의주소와값의참조
2.2 2 차원배열의주소와값의참조 (1/19) & 연산자 ü 2 차원배열요소의주소를참조하는연산자이다. int array[2][2]={10,20,30,40}; 2 차원배열의주소표현 사용법 : &2 차원배열요소 print("%x %x \n", &array[0][0], &array[0][1]); print("%x %x \n", &array[1][0], &array[1][1]);
2.2 2 차원배열의주소와값의참조 (2/19)- - - [2-6.c 실습 ] #include<stdio.h> int main(void) { int array[2][3]={1,2,3,4,5,6}; prini("%x %x %x \n", &array[0][0],&array[0][1],&array[0][2]); prini("%x %x %x \n", &array[1][0],&array[1][1],&array[1][2]); return 0; }
2.2 2 차원배열의주소와값의참조 (3/19)- - - [2-6.c 분석 ] int array[2][3]={1,2,3,4,5,6}; prini("%x %x %x \n", &array[0][0],&array[0][1],&array[0][2]); prini("%x %x %x \n", &array[1][0],&array[1][1],&array[1][2]);
2.2 2 차원배열의주소와값의참조 (4/19) 2 차원배열의다양한주소표현 1 2 차원배열이름은 2 차원배열의시작주소이다. 2 2 차원배열의행의요소는행을대표하는주소이다. 3 2 차원배열에서 array[i] == *(array+i) 는주소이다.
2.2 2 차원배열의주소와값의참조 (5/19)- - - [2-7.c 실습 ] 2 차원배열의다양한주소표현 1 2 차원배열이름은 2 차원배열의시작주소이다. #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; prini("%x %x \n", array, array+0); // 0행의주소 prini("%x \n", array+1); // 1행의주소 } return 0;
2.2 2차원 배열의 주소와 값의 참조 (6/19)- - - [2-7.c 분석]
2.2 2 차원배열의주소와값의참조 (7/19)- - - [2-8.c 실습 ] 2 차원배열의다양한주소표현 2 2 차원배열의행의요소는행을대표하는주소이다. #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; prini("%x %x\n", array[0], &array[0][0]); prini("%x %x\n", array[1], &array[1][0]); return 0; }
2.2 2 차원배열의주소와값의참조 (8/19)- - - [2-8.c 분석 ] int array[2][2]= {10,20,30,40};
2.2 2 차원배열의주소와값의참조 (9/19)- - - [2-9.c 실습 ] 2 차원배열의다양한주소표현 3 2 차원배열에서 array[i] == *(array+i) 는주소이다. #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; } prini("%x %x %x\n", array[0],*(array+0), *array); prini("%x %x \n", array[1],*(array+1)); return 0;
2.2 2 차원배열의주소와값의참조 (10/19)- - - [2-9.c 분석 ] int array[2][2]= {10,20,30,40};
2.2 2 차원배열의주소와값의참조 (11/19)- - - [2-10.c 실습 ] #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; prini("%x %x \n", &array[0][0],&array[0][1]); prini("%x %x \n", &array[1][0],&array[1][1]); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%x %x \n", array[0]+0, array[0]+1); prini("%x %x \n", array[1]+0, array[1]+1); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%x %x \n", *(array+0)+0, *(array+0)+1); prini("%x %x \n", *(array+1)+0, *(array+1)+1); return 0; }
2.2 2 차원배열의주소와값의참조 (12/19)- - - [2-10.c 분석 ] int array[2][2]= {10,20,30,40};
2.2 2 차원배열의주소와값의참조 (13/19) * 연산자 ü 2 차원배열요소에저장된값을참조하는연산자이다. 주소에저장된값참조 * 메모리공간의주소 * * * &array[0][0] array[0]+0 *(array+0)+0 주소 주소 주소
2.2 2 차원배열의주소와값의참조 (14/19)- - - [2-11.c 실습 ] #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; } prini("%d %d \n", *&array[0][0],*&array[0][1]); prini("%d %d \n", *&array[1][0],*&array[1][1]); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%d %d \n", *array[0]+0, *array[0]+1 ); prini("%d %d \n", *array[1]+0, *array[1]+1 ); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%d %d \n", **(array+0)+0, **(array+0)+1 ); prini("%d %d \n", **(array+1)+0, **(array+1)+1 ); return 0;
2.2 2 차원배열의주소와값의참조 (15/19)- - - [2-11.c 분석 ] prini("%d %d \n", *array[0]+0, *array[0]+1 ); prini("%d %d \n", *array[1]+0, *array[1]+1 ); array[i] == *(array+i) 출력결과 : 10 출력결과 : 11 출력결과 : 30 출력결과 : 31
2.2 2 차원배열의주소와값의참조 (16/19)- - - [2-11.c 분석 ] prini("%d %d \n", **(array+0)+0, **(array+0)+1 ); prini("%d %d \n", **(array+1)+0, **(array+1)+1 ); array[i] == *(array+i)
2.2 2 차원배열의주소와값의참조 (17/19)- - - [2-12.c 실습 ] #include<stdio.h> int main(void) { int array[2][2] = {10,20,30,40}; } prini("%d %d \n", *&array[0][0],*&array[0][1]); prini("%d %d \n", *&array[1][0],*&array[1][1]); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%d %d \n", *(array[0]+0), *(array[0]+1)); prini("%d %d \n", *(array[1]+0), *(array[1]+1)); prini("- - - - - - - - - - - - - - - - - - - \n"); prini("%d %d \n", *(*(array+0)+0), *(*(array+0)+1)); prini("%d %d \n", *(*(array+1)+0), *(*(array+1)+1)); return 0;
2.2 2 차원배열의주소와값의참조 (18/19)- - - [2-12.c 분석 ] prini("%d %d \n", *(array[0]+0), *(array[0]+1)); prini("%d %d \n", *(array[1]+0), *(array[1]+1)); array[i] == *(array+i) 출력결과 : 10 출력결과 : 20 출력결과 : 30 출력결과 : 40
2.2 2 차원배열의주소와값의참조 (19/19)- - - [2-12.c 분석 ] prini("%d %d \n", *(*(array+0)+0), *(*(array+0)+1)); prini("%d %d \n", *(*(array+1)+0), *(*(array+1)+1)); array[i] == *(array+i) 출력결과 : 10 출력결과 : 20 출력결과 : 30 출력결과 : 40
공부한내용떠올리기 2 차원배열의선언과구성요소 2 차원배열에데이터를저장하는방법 2 차원배열을선언할때주의할사항 2 차원배열의주소와값을참조하는다양한방법