이번 시간에는 C 포인터와 관련된 문제를 모두 풀어보자.
대표적인 에제부터 시작한다.
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 95, b = 80;
printf("Before : start = %d , edn = %d\n", a, b);
if (a > b) {
swap(&a, &b);
}
printf("after : start = %d , end = %d\n", a, b);
}
int main()
{
int arr[3][4] = { {3,4,3,2}, {1,2,3,5}, {4, 5, 6, 9 } };
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d", *(*(arr + i) + j));
}
}
}
int main()
{
int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7,8,9} };
int(*p)[3] = arr; //arr의 배열의 주소를 *p가 받는다.
int i, j;
for(int i = 0; i <3; i++)
for (int j = 0; j < 3;j++)
{
printf("%d", (*(p + i)[j]));
}
}
여기서 중점인 것은 (*p)[3]이 의미하는 것, 2차원 배열을 포인터로 구현 한 것.
마지막에 printf("%d", (*(p+i)[j])); 가 의미하는 것을 기억하자.
char data[4][5];
char (*p)[5];
p = data //포인터 변수 p는 2차원 배열 data변수의 시작 주소를 저장함
(*p)[1] = 3; // p[0][1] = 3
(*(p+1))[2] = 4; // p[1][2] = 4
(*(p+2))[3] = 5;
(*(p+3))[4] = 8;