c 포인터를 배열처럼

떵떵·2022년 6월 19일
0

정수를 입력받아 가변적으로 배열을 사용하는 방법

배열 선언이 아닌 포인터를 선언하여 malloc()으로 메모리를 할당하는 방법이다.

형태

자료형 포인터이름 = malloc(sizefo(자료형) 크기);

int numPtr = malloc(sizeof(char) input);

이용

포인터를 공부할때 내용물을 가져오려면 "포인터명" 처럼 을 이용해 역참조해야 했다.
하지만, 배열처럼 선언 후 인덱스로 값을 가져올 때는 *을 생략할 수 있다.

numPtr[0] = 10;

printf("%d\n", numPtr[0]);

2차원배열

선언

int main()
{
	int **m = malloc(sizeof(int *) * (세로));
    // sizeof(int *)을 하는 이유:
    // 2차원 포인트 배열은 세로에 배열이 들어가는것이 아닌
    // 가로배열을 참조하는 포인터가 들어가기 때문에 세로의 요소 당 크기는 int*(int포인터)크기여야 한다.
    for(int i=0; i<(세로); ㅑ++)
    {
    	m[i] = malloc(sizeof(int) * (가로));
    }

해제(free)

for (int i=0; i<(세로); i++)
{
	free(m[i]); 가로를 먼저 해제하고 세로를 해제해야 
    // 할당한 모든 메모리를 해제할 수 있다.
}

free(m);

가로를 먼저 해제하지 않고 세로를 먼저 해제하면 가로의 주소를 잃어버리기 떄문에 해제할 수 없다.

선언: 세로 -> 가로
해제: 가로 -> 세로

조립은 분해의 역순과 같은 원리

0개의 댓글