[C06] C언어/자료구조_동적 할당(malloc, free)C언어_자료구조/C언어 기본 개념2021. 9. 14. 18:00
목차
포인터와 배열의 관계
📌 포인터와 배열은 밀접한 관계를 갖고 있으나, 분명한 차이점이 있다.
📌 배열은 선언하게 되면 기본적으로 배열 자기 자신의 시작 주소를 갖고 있다.
#include <stdio.h>
int main() {
char str[100];
printf("str의 주소 : %p\n", &str);
printf("str의 값 : %p\n", str);
printf("입력 : ");
scanf("&s", str);
printf("출력 : %s\n", str);
return 0;
}
#include <stdio.h>
int main() {
char str1[10] = "Hello";
char* str2 = "Abcde";
/*printf("atr1 : %s\n", str1);
printf("str1 : %s\n", str2);*/
str1[0] = 'B';
str2[0] = 'Z';
printf("str1 = %c%c%c%c%c\n",str1[0], str1[1], str1[2], str1[3], str1[4]);
printf("str2 = %c%c%c%c%c\n", str2[0], str2[1], str2[2], str2[3], str2[4]);
return 0;
}
동적 할당
- 메모리 공간을 원하는 시점에 원하는 크기 만큼 할당 받고 그 공간을 사용 후, 원하는 시점에 해제하는 방식
- 메모리 공간을 할당 받을 때는 malloc()함수를 사용해서 할당 받을 수 있다.
- 이 때, 반드시 stdlib.h 헤더파일을 선언해주어야 한다.
- malloc() 함수의 원형 : 주소를 저장할 변수 = malloc(크기);
- 동적 할당을 통해서 할당 받은 메모리 공간은 Heap 영역에 해당한다.
- 동적 할당 받은 메모리 공간을 해제할 때는free(해제할 공간의 주소); 형식으로 해제할 수 있다.
- 한 번의 동적 할당에는 반드시 한 번의 동적 해제가 진행되어야 한다.
- malloc()함수에서 크기를 넘겨 줄 때에는 기본적으로 sizeof()연산자를 이용해서 넘겨준다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int* ptr;
ptr = (int*)malloc(4); //void 포인터 형태의 값을 반환
*ptr = 10;
printf("출력 : %d\n", *ptr);
free(ptr);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int* ptr;
ptr = (int*)malloc(sizeof(int)*34);
ptr[0] = 10;
ptr[1] = 20;
printf("츨력 : %d %d\n", ptr[0], ptr[1]);
free(ptr);
return 0;
}
728x90
반응형
LIST
'C언어_자료구조 > C언어 기본 개념' 카테고리의 다른 글
[C05] C언어/자료구조_구조체(기본, 별칭, 익명 구조체) (0) | 2021.09.07 |
---|---|
[C04] C언어/자료구조_재귀 (0) | 2021.08.31 |
[C03] C언어/자료구조_변수 (0) | 2021.08.24 |
[C02] C언어/자료구조_반환값에 따른 함수의 여러가지 형태 (0) | 2021.08.17 |
[C01] C언어/자료구조_포인터 기본 개념 (2) | 2021.08.11 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!