1. 메모리할당에 관해서..
 
1) 정적할당
- 프로그램이 실행되기 이전에 이미 변수의 저장 공간을 할당하고 그 모듈이나 또는 프로그램이 종료되면 변수가 해제되는 방식
- 장점 : 사용방법간단
- 단점 : 메모리이 사용예측 부정확
- ex) int x=100;
 
2) 동적할당
- 프로그램 실행중에 필요한 메모리를 할당하는 방법
- 함수 malloc() 을 이용하여 메모리공간을 확보  (stdlib.h)
 
2. 동적 메모리 할당 함수
 
1) malloc() 함수
- 인자로 메모리 할당의 크기를 지정하고, 반환값으로 할당된 메모리의 시작주소를 반환
- ex) int *ptr;
        ptr = (int *) malloc( sizeof(int));        
        *ptr = 10;                                        
  4byte공간을 확보하고 시작주소는 ptr이라는 포인터가 가리키고 있다
  그리고 4byte공간에 10이라는 데이터를 넣음
 
2) free() 함수
- malloc() 함수 사용후 할당된공간은 프로그램이 끝나기 전에 항상 닫아줘야 한다, 쓰는 함수
- 이 함수는 인자로 해체할 메모리공간의 주소 값을 갖는 포인터를 이용하여 호출한다
- ex) free(ptr);
 
3) 메모리관련 함수 원형
 
메모리
함수원형
기능
메모리할당
(기본값 없음)
void* malloc(size_t)
인자만큼의 메모리 할당 후
기본 주소 반환
메모리할당
(기본값 0으로)
void* calloc(size_t, size_t)
뒤 인자만큼의 메모리 크기로 앞 인자수 만큼 할당 후 기본주소 반환
기존메모리변경
(이전값그대로)
void* realloc(void*, size_t)
앞 인자의 메모리를 뒤 인자크기로 변경후, 기본주소반환
메모리 해제
void free(void *)
인자를 기본 주소로 갖는
메모리 해제
 
 
3. 자기참조 구조체
 
- 자기참조 구조체는 반드시 구조체의 멤버 변수 중의 하나가 자기 자신의 구조체 포인터 변수
- 동일 구조체의 표현을 여러 개 만들어 연결할 수 있는 기능 ( 연결 리스트의 기초)
 
1) 구조체타입선언
typedef struct work{
           int id;
           int age;
           struct work *next;
}list;                                     // 구조체 선언 typedef로 list로 선언해도 가능
 
2) 자료형 두개 선언
list *first = NULL;
list *second = NULL;
 
3) malloc() 함수 사용하여 메모리 저장공간을 동적으로 할당
first = (list *)malloc(sizeof(list));
second = (list *)malloc(sizeof(list));
 
4)구조체에 데이터 넣기
first->id = 100;
first->age = 25;
second->id = 101;
second->age = 24;
second->next = NULL;
 
 * 구조체 포인터 변수 참조 연산자  "->"
   (*first).id       first->id   이거 두개가 같다
 
5)두개의 구조체 연결하기
first->next = second;
 
Posted by 용학도리
,