동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당받는 것이다. 프로그램에서는 효율성을 위해 필요한 만큼의 메모리를 시스템으로부터 할당받아 사용하고 사용이 끝나면 시스템에 메모리를 반드시 반납한다.
동적 메모리는 malloc()계열 라이브러리 함수를 사용해 할당받아 사용할 수 있다.
malloc은 메모리를 할당하라는 의미이며 오른쪽 int형의 크기만큼 할당한다는 의미이다. int형은 4byte이므로 4를 넣어도 무방하다. 메모리를 할당 후 그부분의 주소를 가리키도록 해야하므로 (int *) integer pointer로 형변환을 시켜줌으로써 포인터 integer 변수가 해당 위치를 기억할 수 있게 해주는 것이다.
pi가 NULL값이라 실패 문구가 뜬다면 exit(1)을 띄워 즉시 프로그램을 종료한다.
할당받은 메모리를 이용하는 방법은 포인터 pi 변수가 가리키고 있는 주소의 값에 100을 넣어주고 100을 출력하면 된다. 사용한 후에는 free를 입력하여 해당 메모리를 반드시 반환하도록 한다.
malloc은 기본적으로 void 형으로 할당되기 때문에 내가 원하는 형으로 변환시켜줄 수 있다. float이 필요하면 (float *)로 해주고 int가 필요하면 (int *)로 형 변환하는 것이다. 이렇게 형변환을 하지않으면 컴퓨터 멍청하므로 무슨 형으로 쓸 지 모르기 때문이다.
char 문자 1개의 공간 * 100개의 공간. 문자열을 위한 공간을 할당해주고 pc포인터가 NULL이라면 실패 문구를 띄워주고 종료시킨다. 100 * sizeof(char)의 경우 크기를 할당해주는 배열과 거의 흡사하다.
알파벳(26개)의 출력을 위해 for 반복문을 사용한다. *(pc + i) = 'a' + i가 의미하는 바는 배열로 말하자면 *(pc)가 가리키는 값이 첫번째 배열 값이며 *(pc+1)은 그 다음에 오는 값을 가리키게 된다. 이런식으로 0번째 인덱스부터 25번째 인덱스까지 반복하여 아스키코드 97번인 a라는 문자부터 1씩 더해가며 98, 99, ... 123(z)까지 출력하는 것이다.
그다음 *(pc + i) = 0 을 입력하여 문자를 전부 출력한 뒤 마지막에 아스키코드에서 NULL을 의미하는 0을 넣어준다. 문자가 들어가다가 z까지 읽고 NULL을 만나면 그것은 문자열의 종료를 의미하는 것이다. free(pc)를 입력해 pc에 해당하는 동적메모리 할당 해제를 하면된다.
int 포인터 형변환을 해주고 int형이 5자 들어갈 수 있는 공간을 할당해준다. 그다음 pi배열을 0~4까지 값을 넣어주고 포인터 pi+i 즉 포인터 주소를 하나씩 증가시키며 그것에 해당하는 위치의 값을 출력한다.
이 글은 프로그래머 나동빈님의 강의 내용을 개인적인 학습을 목적으로 정리하여 쓴 글임을 밝힙니다.