2015년 7월 9일 목요일

20150710 3차원 배열 / 포인터의 포인터에 대한 이해

2차원 배열을 이해하고 있다면, 3차원 배열도 이해하고 있는것.
int arr1[2][3][4]; // 높이 2, 세로 3, 가로 4인 int형 3차원 배열

★3차원 배열은 여러 개의 2차원 배열이 모여있는 형태로 이해하는 것이 더 합리적!

int * ip
포인터가 가리키는 type 포인터 선언 변수이름

일반적인 포인터는 1차원 배열을 가리킬수있다(2차원 이상은 경고?)

예제
#include <stdio.h>

int main(void)
{
int iA=100;
int *ip=&iA;
int **ipp=&ip;
int ***ippp=&ipp;

printf("%d\n", iA);
printf("%d\n", *ip); // iA의 값
printf("%d\n", **ipp); // iA의 값
printf("%d\n", ***ippp); // iA의 값
printf("\n");
printf("%08X\n", &iA);
printf("%08X\n", ip); // iA의 주소 값
printf("%08X\n", ipp); // ip의 주소 값
printf("%08X\n", ippp); // ipp의 주소 값, ippp의 주소 값=&ippp 
return 0;
}

예제
#include <stdio.h>

int main(void)
{
double num=3.14;
double *ptr=&num; // num의 주소 값을 저장 
double **dptr=&ptr; // ptr의 주소 값을 저장
double *ptr2;

printf("%9p %9p\n", ptr, *dptr); // ptr=&num, *dptr=*ptr=&num
printf("%9g %9g\n", num, **dptr); // num=3.14, **dptr=3.14

ptr2=*dptr; // ptr2=ptr 과 같은 문장 이때 ptr2=&num
*ptr2=10.99;
printf("%9g %9g\n", num, **dptr); // num=10.99, **dptr=10.99
return 0;
}

예제
#include <stdio.h>

void SwapIntPtr( int **dp1, int **dp2)
{
int *temp=*dp1; // *dp1=&num1
*dp1=*dp2; // *dp2=&num2
*dp2=temp; // temp=*dp1
}

int main(void)
{
int num1=10, num2=20;
int *ptr1, *ptr2;

ptr1=&num1, ptr2=&num2;
printf("*ptr1, *ptr2 : %d %d\n", *ptr1, *ptr2);

SwapIntPtr(&ptr1, &ptr2); // ptr1과 ptr2의 주소 값 전달!
printf("*ptr1, *ptr2 : %d %d\n", *ptr1, *ptr2);
return 0;
}

댓글 없음:

댓글 쓰기