임의의 메모리 할당 함수 malloc
•
void *malloc(size_t size);
m = 메모리 / alloc = 할당
size : 할당할 바이트, 'size _t == unsigned int'
◦
할당할 메모리 공간이 부족하면 NULL, 0 '\0' 리턴
◦
할당한 메모리의 첫번 째 주소를 리턴
◦
리턴형이 void * 이므로 형 변환을 통해 메모리 주소를 받아야 함
포인터의 메모리 할당과 해제
•
임의의 메모리 해제 free 함수
void free(void *memblock);
memblock : 해제할 메모리 주소
•
malloc(), free() 포함 헤더
stdlib.h 또는 malloc.h
•
메모리 계산 키워드 sizeof
데이터 형, 변수, 배열의 메모리 크기를 바이트 단위로 알려주는 키워드
•
형식
sizeof(변수 또는 데이터 형), sizeof 변수
sizeof(int), sizeof(변수명), sizeof(배열명)
sizeof를 사용한 메모리 할당과 scanf 사용 예
#include <stdio.h>
#include <stdlib.h>
int main(void){
int *ptr;
ptr = (int*)malloc(sizeof(int)*3);
ptr[0] = 1;
ptr[1] = 2;
ptr[2] = 3;
printf("%d %d %d\n", ptr[0], ptr[1], ptr[2]);
printf("input : ");
scanf("%d %d %d", &ptr[0], &ptr[1], &ptr[2]);
printf("%d %d %d", ptr[0], ptr[1], ptr[2]);
free(ptr);
return 0;
}
C
복사
포인터를 함수의 매개변수로 사용하는 예
•
함수의 매개변수로 전달된 값을 함수 안에서 수정할 필요가 있을 때
int function(int *ptr)
int main(void){
int var=7;
function(&var);
return 0;
}
C
복사
변수를 함수로 전달하는 경우
void add(int *ptr){ // int *ptr == int ptr[] 과 같다고 생각할 수 있다
*ptr = *ptr + 1;
}
int main(void){
int var = 12;
add(&var);
printf("%d\n", var);
return 0;
}
C
복사
배열을 함수로 전달하는 경우
#include <stdio.h>
void add(int *ptr, int count){
int i;
for(i = 0; i < count; i++){
ptr[i] = ptr[i] +1;
}
}
int main(void){
int array[] = {1, 2, 3, 4, 5};
int count = sizeof(array) / sizeof(array[0]);
int i;
add(array, count);
for(i = 0; i < count; i++){
printf("%d", array[i]);
}
putchar('\n');
return 0;
}
C
복사
•
포인터 자체로는 배열의 개수를 알 수 없다.
→ 외부에서 개수 입력 받음