Presentation is loading. Please wait.

Presentation is loading. Please wait.

18장. 다차원 배열 그리고 포인터.

Similar presentations


Presentation on theme: "18장. 다차원 배열 그리고 포인터."— Presentation transcript:

1 18장. 다차원 배열 그리고 포인터

2 차원 배열 이름의 포인터 타입 그림 18-1 그림 18-2

3 18-1 2차원 배열 이름의 포인터 타입 1차원 배열 이름의 포인터 타입 결정 포인트! 1차원 배열 이름
차원 배열 이름의 포인터 타입 1차원 배열 이름의 포인터 타입 결정 포인트! 포인터가 가리키는 요소의 자료형 포인터 연산 시 증가하는 바이트의 크기 1차원 배열 이름 배열 이름이 가리키는 요소의 자료형이 일치 한다면, 포인터 연산 시 증가하는 값의 크기도 일치. 따라서 1차원 배열 이름의 경우 가리키는 요소만 참조.

4 18-1 2차원 배열 이름의 포인터 타입 다차원 배열의 포인터 타입 결정 포인트! 2차원 배열 이름
차원 배열 이름의 포인터 타입 다차원 배열의 포인터 타입 결정 포인트! 포인터가 가리키는 요소의 자료형 포인터 연산 시 증가하는 바이트의 크기 2차원 배열 이름 포인터가 가리키는 요소의 자료형이 같다 해도 포인터 연산 시 증가하는 값의 크기 불일치! 포인터 연산 결과도 생각해 봐야 함.

5 18-1 2차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(1단계) 그림 18-4 그림 18-5
차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(1단계) /* two_array1.c */ #include <stdio.h> int main(void) { int a[3][2]={1, 2, 3, 4, 5, 6}; printf("a[0] : %d \n", a[0]); printf("a[1] : %d \n", a[1]); printf("a[2] : %d \n", a[2]); printf("a : %d \n", a); return 0; } 그림 18-4 그림 18-5

6 18-1 2차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(2단계) 그림 18-6 그림 18-7
차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(2단계) /* arr2_name.c */ #include <stdio.h> int main(void) { int a[3][2]={1, 2, 3, 4, 5, 6}; printf("a : %d \n", a ); printf("a+1 : %d \n", a+1); printf("a+2 : %d \n", a+2); return 0; } 그림 18-6 그림 18-7

7 차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(결론1) 그림 18-8

8 18-1 2차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(결론2) 2차원 배열 이상의 포인터 타입 구성
차원 배열 이름의 포인터 타입 2차원 배열 이름의 특성 이해(결론2) 2차원 배열 이상의 포인터 타입 구성 가리키는 대상의 자료형 포인터 연산 시 증가하는 바이트의 크기 /* arr2_ptr.c */ #include <stdio.h> int main(void) { int arr1[3][2]; printf("arr1 : %d \n", arr1); printf("arr1+1 : %d \n", arr1+1); printf("arr1+2 : %d \n", arr1+2); return 0; } /* arr2_ptr.c */ #include <stdio.h> int main(void) { int arr2[2][3]; printf("arr2 : %d \n", arr2); printf("arr2+1 : %d \n", arr2+1); printf("arr2+2 : %d \n", arr2+2); return 0; }

9 18-1 2차원 배열 이름의 포인터 타입 2차원 배열 이름에 일치하는 포인터 선언 예제 pnt_arr.c 참조 그림 18-12
차원 배열 이름의 포인터 타입 2차원 배열 이름에 일치하는 포인터 선언 예제 pnt_arr.c 참조 int arr[2][4]; int (*pArr)[4]; 그림 18-12

10 18-1 2차원 배열 이름의 포인터 타입 매개 변수로 선언되는 포인터의 또 다른 표현 그림 18-13
차원 배열 이름의 포인터 타입 매개 변수로 선언되는 포인터의 또 다른 표현 그림 18-13 int main (void) { int arr1[2][4]={1, 2, 3, 4, 5, 6, 7, 8}; int (*ptr1)[4]=arr1; // OK int ptr2[][4]=arr1; // ERROR

11 “int (*pArr)[4]” 과 “int* pArr[4]”의 차이점
차원 배열 이름의 포인터 타입 “int (*pArr)[4]” 과 “int* pArr[4]”의 차이점 그림 18-14

12 18-2 2차원 배열에서의 “arr[i]”와 “*(arr+i)”
다양한 형태의 배열 요소 접근 방법 /* two_array2.c */ #include <stdio.h> int main(void) { int a[3][2]={ {1, 2}, {3, 4}, {5, 6} }; printf("a[0] : %d \n", a[0]); printf("*(a+0) : %d \n", *(a+0)); printf("a[1] : %d \n", a[1]); printf("*(a+1) : %d \n", *(a+1)); printf("a[2] : %d \n", a[2]); printf("*(a+2) : %d \n", *(a+2)); printf("%d, %d \n", a[1][0], (*(a+1))[0]); printf("%d, %d \n", a[1][2], *(a[1]+2)); printf("%d, %d \n", a[2][1], *(*(a+2)+1)); return 0; }


Download ppt "18장. 다차원 배열 그리고 포인터."

Similar presentations


Ads by Google