[자료구조] 포인터 - 배열

_찬·2022년 9월 29일
0

자료구조

목록 보기
4/5
post-thumbnail

저번에는 포인터에 대해서 정리를 하였다.
이번에는 포인터 배열에 대해서 복습과 정리를 해보도록 하겠다.
먼저 시작하기 전에 기초적인 것 부터 복습하고 넘어가자.

int (*arr)[4]

2차원 배열을 가리키는 포인터 지정

잘 기억해 두자.

int *arr[4]

int 형 포인터 값 4개를 저장하는 배열

잘 기억해 두자.

1차원 배열

먼저 간단하게 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가 나온다.

그럼 이것을 포인터를 활용하여 모든 값을 출력시켜 보겠다.

1차원 배열 전부 출력

#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;
}

1차원 배열 함수

#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차원 배열은 조금 더 어렵지만 간단하게 설명하겠다.

앞에서 보여주었던 포인터의 값을 저장하는 포인터 배열과 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;
}

2차원 배열 함수

#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;
}
profile
꾸준한 사람이 되길!

0개의 댓글