저번에는 포인터에 대해서 정리를 하였다.
이번에는 포인터 배열에 대해서 복습과 정리를 해보도록 하겠다.
먼저 시작하기 전에 기초적인 것 부터 복습하고 넘어가자.
2차원 배열을 가리키는 포인터 지정
잘 기억해 두자.
int 형 포인터 값 4개를 저장하는 배열
잘 기억해 두자.
먼저 간단하게 1차원 부터 시작해보겠다.
간단하게 배열을 만들어주고 포인터 변수에 포인터의 주소값을 넣어주겠다.
중요한 것 : 배열의 이름은 배열의 시작주소 이다.
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int* a = arr;
printf("%d",*a);
return 0;
}
출력값 : 1
이렇게 출력이 되는 이유는 arr의 주소값이 100이라고 하였을 때 a는 주소값 100을 받게 되고, 배열의 이름은 배열의 시작주소 즉 100번의 주소값을 가진 곳에는 1이 존재한다.
그럼 a + 1을 하면 몇이 나올까?
printf("%d",*a + 1); //로 수정하였다.
2가 나온다.
그럼 이것을 포인터를 활용하여 모든 값을 출력시켜 보겠다.
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int* a = arr;
for(int i=0; i<3; i++){
printf("배열 %d 번째의 값 : %d\n",i,*a + i);
}
return 0;
}
#include <stdio.h>
void print(int *a) // 포인터 변수를 만들어서 main 변수의 arr 주소값을 받아준다.
{
for(int i=0; i<3; i++){
printf("%d ",*a + i);
}
}
int main()
{
int arr[3] = {1,2,3};
print(arr);
return 0;
}
결국엔 오고야 말았다.
2차원 배열은 조금 더 어렵지만 간단하게 설명하겠다.
앞에서 보여주었던 포인터의 값을 저장하는 포인터 배열과 2차원 배열을 가리키는 포인터를 이용하여 만들어 보겠다.
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int (*a)[3] = arr; // 2차원배열의 시작주소를 기리킨다.
printf("%d\n", *a); // 주소가 출력이 된다.
printf("%d", a[0][0]); // 인덱스로 값 출력
return 0;
}
#include <stdio.h>
void print(int a[][3], int col, int row){ // *은 필요 x
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][3] = {{1,2,3},
{4,5,6},
{7,8,9}};
print(arr,3,3);
return 0;
}