카테고리 없음

배열과 포인터

게임 개발 2023. 1. 7. 15:40

배열의 원리와 포인터의 원리 구조체의 원리는

 

사실 모두 같다.

 

RAM에서 주소값을 가져와서

변수를 꺼내오는 형식이다.

 

구조체는 서로 다른 자료형의 집합의 멤버 포인터의 원리이다.

배열은 서로 같은 자료형의 집합의 인덱스 포인터의 원리이다.

 

참고로, [] <- 는 배열에서만 쓸수있는 연산자이다.

 

그렇다면 이를 함수로 빼서 이해해보자.

 

#include <stdio.h>

// 배열을 다른 함수에 전달하여 입력 및 출력
// 입력 함수 따로 출력 함수 따로

int printarr(int * const arr, int count)
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]); // *(arr + i)
}
printf("\n");
}

int scan_arr(int* arr[], int count)
{
for (int i = 0; i < count; i++)
{
scanf_s("%d", &arr[i]);
}
}

int main(void)
{
int arr[5] = { 1,2,3,4,5 };

scan_arr(arr, sizeof(arr) / sizeof(int));

printarr(arr, sizeof(arr) / sizeof(int));

return 0;
}

 

 

여기서 함수 부분의 코드만 떼와보겠다.

 

int printarr(int * const arr, int count)
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]); // *(arr + i)
}
printf("\n");
}

 

이러한 표현을

 

int printarr(int * const arr, int count)
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]); // *(arr + i)
}
printf("\n");
}

 

int printarr(int * const arr, int count)  == int printarr(int arr[], int count)

 

이와 같이 이해할 수 있다.

 

즉 포인터와 같은 원리로 컴퓨터가 인덱스나 멤버를 빼오는 것이기 때문에

arr자체가 포인터가 되어 불러올 수 있는 것이다.