정적 할당 : 프로그램 시작 전에 메모리의 크기 결정
int test[10]={0};
동적 할당 : 프로그램의 실행 도중에 동적으로 메모리 할당. 할당된 메모리는 사용 후 반납
malloc() … free()
1. #include <stdlib.h> 추가
2.자료형이 일치하는 포인터 변수 선언 » 포인터 변수를 통하여 메모리 접근
3.필요한 메모리의 크기 설정
4. 메모리 할당을 위한 함수 사용
5.메모리 할당 후 포인터 또는 배열의 접근방법과 동일하게 사용하여 입력 또는 출력 및 검색함
6. 사용한 메모리는 반납해야 하며, 반납을 위한 함수를 사용 함
int *pt; // 2. 자료형이 일치하는 포인터 변수 선언
pt=(int *)malloc(10*sizeof(int)); // 3. 메모리 할당을 위한 함수 사용
// pt : 동적 메모리의 주소
free(pt); // 6. 메모리 반납
int *pt;
pt=(int *)malloc(10*sizeof(int));
//pt : 동적 메모리의 주소
*pt=1;
*(pt+1)=2; // 포인터 변수, 간접 참조 연산자를 사용함
..
pt[8]=9; // 배열의 인덱스를 사용함
pt[9]=10;
지정한 크기 만큼의 메모리 할당
» 메모리 할당 시 각 메모리의 초기치는 쓰레기 값임
ex) i=(int *)malloc(10*sizeof(int));
지정한 크기 만큼의 메모리 할당
» 메모리 할당 시 각 메모리의 값을 0으로 초기화 함
ex) i=(int *)calloc(10, sizeof(int));
메모리의 크기를 변경함
» malloc 선언 이후, 메모리 크기 조정 시 사용됨
ex) i=(int *)malloc(10*sizeof(int));
i=(int *)realloc(i,100*sizeof(int));
컴파일 전 미리 컴파일 처리하는 부분. ( main 함수 이전 선언부 )
전처리기의 마지막에는 ;를 붙이지 않음
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int main() {...};
#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 함수에서의 변수는 인식불가