#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996) // scanf에 대한 warning 무시
int main() {
int i;
int *a;
int na;
scanf("%d", &na);
a = calloc(na, sizeof(int)); // 메모리 동적 할당: int의 size만큼의 na 개가 메모리 할당
if (a == NULL) // 메모리 할당이 안되었을 시
printf("ERROR");
else {
for (int i = 0; i < na; i++) // 할당받은 메모리 만큼 값을 넣자.
scanf("%d", &a[i]);
for (int i = 0; i < na; i++) // 잘 들어 갔나 확인
printf("%d ", a[i]);
free(a); // 동적 할당 해제
}
return 0;
}
입력>>> 5
1 2 3 4 5
출력>>>
1 2 3 4 5
calloc 함수
#include <stdlib.h>
필요void *calloc(size_t nmemb, size_t size);
size
인 자료가 nmemb
개만큼 들어갈 메모리 할당.NULL
은 값이 없음을 의미하며 메모리가 할당되지 않음.free 함수
calloc
과 같음.void free(void *ptr)
ptr
이 가리키는 메모리를 해제int형 포인터에 동적 할당을 하면 어떻게 int형 배열이 될까?
calloc
함수가 확보하는 것은 특정한 자료형의 객체가 아니라 단순히 메모리 영역이기 때문calloc
으로 첫 주소 포인터를 반환받아서 이를 +- 연산을 하면 배열처럼 접근 가능*(a+2) = &a[2];
포인터
int *p;
= int형 객체를 가리키는 포인터p = &n;
*(간접 연산자)
를 이용함*p=999;
: p가 가리키고 있는 곳(n)에 999를 대입하라.