동적 메모리 & 전처리기

FeelSoo·2022년 6월 19일
0

1. 메모리 할당 방법 2가지


정적 할당 : 프로그램 시작 전에 메모리의 크기 결정

int test[10]={0};




동적 할당 : 프로그램의 실행 도중에 동적으로 메모리 할당. 할당된 메모리는 사용 후 반납

malloc() … free()





2. 동적 메모리 할당 방법


1. #include <stdlib.h> 추가

2.자료형이 일치하는 포인터 변수 선언 » 포인터 변수를 통하여 메모리 접근

3.필요한 메모리의 크기 설정

4. 메모리 할당을 위한 함수 사용

5.메모리 할당 후 포인터 또는 배열의 접근방법과 동일하게 사용하여 입력 또는 출력 및 검색함

6. 사용한 메모리는 반납해야 하며, 반납을 위한 함수를 사용 함


int *pt; // 2. 자료형이 일치하는 포인터 변수 선언

pt=(int *)malloc(10*sizeof(int)); // 3. 메모리 할당을 위한 함수 사용

//	pt : 동적 메모리의 주소

free(pt); // 6. 메모리 반납





3. 동적 메모리 접근 방법


int *pt;
pt=(int *)malloc(10*sizeof(int));
//pt : 동적 메모리의 주소

*pt=1;		
*(pt+1)=2; // 포인터 변수, 간접 참조 연산자를 사용함
..
pt[8]=9; // 배열의 인덱스를 사용함
pt[9]=10;





4. 동적 메모리 할당을 위한 함수


(1) malloc()


지정한 크기 만큼의 메모리 할당

» 메모리 할당 시 각 메모리의 초기치는 쓰레기 값임

ex) i=(int *)malloc(10*sizeof(int));



(2) calloc()


지정한 크기 만큼의 메모리 할당

» 메모리 할당 시 각 메모리의 값을 0으로 초기화 함

ex) i=(int *)calloc(10, sizeof(int));



(3) realloc()


메모리의 크기를 변경함

» malloc 선언 이후, 메모리 크기 조정 시 사용됨

ex) i=(int *)malloc(10*sizeof(int));
	i=(int *)realloc(i,100*sizeof(int));





5. 전처리기 :

컴파일 전 미리 컴파일 처리하는 부분. ( main 함수 이전 선언부 )
전처리기의 마지막에는 ;를 붙이지 않음

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5

int main() {...};





6. 전처리기 지시어


#include의 경우 : #include<stdio.h> 등의 헤더파일 추가

#define의 경우 : #define N 10 / #define ADD(x,y) ((x)+(y)) / #define BIG(x,y) ( (x) > (y)?(x): (y)) 등의 매크로 추가

#if .. #elif...#else .. #endif : 어떤 전처리가 되어 있는지 확인함, main 함수에서의 변수는 인식불가

#ifdef ... #else .. #endif : 어떤 전처리가 되어 있는지 확인함, main 함수에서의 변수는 인식불가
profile
세상은 넓고 배울건 많다

0개의 댓글