포인터 배열이란?
포인터 변수를 저장할수 있는 배열
1
|
int *p[3] ={&arr1,&arr2...};
|
cs |
말그대로 포인터 변수들을 저장하고있는 배열이다.
배열 포인터란?
배열을 가리키는 포인터
사용하는 이유: 2차원 이상의 배열에서 인덱싱을 하기위해서!
1
|
int (*p)[3] =arr1;
|
cs |
* 일반 포인터 변수를 생성하여 접근 할 때는 * 로 값에 접근
* 위와 같이 배열 포인터로 생성하여 접근 할때는 **로 값에 접근
* 일반 변수를 포인터로 접근 할때도 **로 값에 접근
- 예제
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr1[6] = { 10,20,30,40,50,60 };
int arr2[2][3] = { 10,20,30,40,50,60 };
int *p1 = arr1;
int *p2 = arr2;
int (*p3)[3] =arr2;
printf(" arr1[6] = {10,20,30,40,50,60} \n arr2[2][3]={10,20,30,40,50,60} \n\n");
printf("*p= arr1 *p2=arr2 *p3[3]=arr2 \n\n");
printf(" *p 출력 : p3 제외 모두 0번 째 인덱스 값이 출력 p3은 배열 포인터이므로 주소값 출력 \n");
printf("p1=%d\n",*p1);
printf("p2=%d\n", *p2);
printf("p3=%d\n", *p3);
printf("\n p[1] 출력: p3 제외 모두 1번 째 인덱스 값이 출력 p3은 배열 포인터이므로 주소값 출력 \n");
printf("p1=%d\n", p1[1]);
printf("p2=%d\n", p2[1]);
printf("p3=%d\n", p3[1]);
printf("\n (p + 1) 출력 : 모두 주소값이 출력 \n");
printf("p1=%d\n",(p1+1) );
printf("p2=%d\n", (p2 + 1));
printf("p3=%d\n", (p3 + 1));
printf("\n *(p + 1) 출력 : p3 제외 모두 첫번 째 인덱스 값이 출력 p3은 배열 포인터이므로 주소값 출력 \n");
printf("p1=%d\n", *(p1 + 1));
printf("p2=%d\n", *(p2 + 1));
printf("p3=%d\n", *(p3 + 1));
printf("\n **(p + 1) 출력 : p3 제외 에러 발생 p3은 **를 통해 0번 째 인덱스 값이 출력 \n");
printf("p1=에러 발생\n");
printf("p2=에러 발생\n");
printf("p3=%d\n", **(p3 + 1));
printf("\n1차원 배열과 2차원 배열 변수를 통한 비교 연산");
printf("\narr1 +1=%d\n", arr1 + 1);
printf("*(arr1 +1)=%d\n\n", *(arr1 + 1));
printf("arr2 +1=%d\n", arr2 + 1);
printf("*(arr2 +1)=%d\n", *(arr2 + 1));
printf("**(arr2 +1)=%d\n\n", **(arr2 + 1));
printf("p3[1][0]=%d , arr2[1][0]=%d\n\n", p3[1][0], arr2[1][0]);
printf("결론: 배열 포인터나 배열 변수를 통한 포인터 접근 시 ** 를 통해 값에 접근한다.\n");
return 0;
}
- 출력문 결과
'C > 기본 문법 내용 정리' 카테고리의 다른 글
메모리 영역 (0) | 2022.03.16 |
---|---|
파일 입출력 (0) | 2022.03.08 |
10장. 구조체 (0) | 2022.03.01 |
9장. 문자열 (0) | 2022.02.08 |
8장. 포인터 (0) | 2022.02.03 |