노는게 제일 좋습니다.

13회차 : 동적 메모리 할당, 이중 포인터 본문

C

13회차 : 동적 메모리 할당, 이중 포인터

노는게 제일 좋습니다. 2017. 2. 20. 22:54

참고자료 http://soen.kr/


1. 동적 할당, 할당 해제

malloc과 calloc은 인수에 넣은 만큼의 공간을 할당하는 함수. free는 메모리를 풀어주는 함수. stdlib.h에 있다.

void *malloc(size_t size );

void *calloc( size_t num, size_t size );

void free(void *memblock );

int *ar;
ar = malloc(10 * sizeof(int));
printf("%p",ar);
free(ar);
printf("\n%p", ar);


2. 재할당
void *realloc( void *memblock, size_t size );

첫 번째 인수로 할당된 메모리의 번지를 주고, 두 번째 인수로 재할당 크기를 준다.

첫 번째 인수가 NULL이면 메모리를 새로 할당하고, 두 번째 인수가 0이면 할당 해제한다.(free함수와 같음)


혹시 메모리 사정상 포인터값이 바뀔 수는 있지만, 내용은 유지된다.


3. 할당한 메모리 크기 읽기

size_t  _msize(void *memblock);

표준함수는 아니다.


4. 다중포인터
포인터를 가리키는 포인터
int i = 53;
int *pi = &i;
int **ppi = π
printf("pi:%d  *ppi:%d   **ppi:%d", pi, *ppi, **ppi);
-> 출력결과 예 : pi:1234  *ppi:1234  **ppi:53

5. main함수의 리턴값
프로그램이 종료될 때 운영체제로 넘기는 리턴값. 탈출코드 라고도 한다.

6. main함수의 인수
main함수의 원형은 다음과 같이 쓸 수 있다. 인수는 뒤에서부터 차례로 생략할 수 있다.

void(또는 int) main(int argc,char *argv[],char *env[]);

- int argc : 받을 인수의 갯수. 프로그램 이름을 포함한다. (program 1 2와 같이 호출이 argc의 값은 3)

- char *argv[] : 인수의 값. argv[0]은 프로그램 이름. 이후는 인수

- char *env[] : 운영체제의 환경변수


7. void ** 이중포인터

void **은 void *과는 다르게, 어떤 대상체를 가리키며 어떤 타입인지 정확히 알고있다.

void * 타입인 어떤 포인터를 가리키는 것이다.

 void *avp[5];
 void **vp = avp; //avp배열의 포인터를 대입

 int i = 5;
 avp[0] = &i;

 // **vp; 로 avp[0]을 읽지는 못한다
 printf("%d", *(int *)*vp); // 5






'C' 카테고리의 다른 글

15회차 : 배열 포인터, 배열과 문자열  (0) 2017.02.26
14회차 : 첨자 연산, 포인터 배열  (0) 2017.02.23
12회차 : void형 포인터  (0) 2017.02.18
11회차 : 포인터 연산  (0) 2017.02.18
10회차 : 배열  (0) 2017.02.11
Comments