
응용 포인터
***함수 포인터 ***
함수 포인터의 기본적인 형태
type (*name)(argument)
int (*fp[])(int, int)
해석법 : fp는 배열인데, 무엇에 대한 배열이냐면 포인터에 대한 배열이다.
포인터는 무엇에 대한 포인터냐면 return 값을 int로 가지고
argument가 (int, int)인 함수를 가르치는 포인터이다.
정리하자면 return이 int고 argument가 (int, int)인 함수를 가르키는 포인터에 대한 배열이다.
함수의 정체는 특정 동작 수행을 위해 instruction을 모아 놓은 블럭이다. 해당 블럭은 일반적으로 .text 영역에 저장되며 수정이 불가능하다. function은 해당 function 블럭이 저장된 주소를 가리킨다.(그런 의미에서 연속적인 값들을 저장한 블록을 가리키는 배열과 유사점이 있다.)
함수 포인터를 사용하면 배열을 전달했던 것처럼 함수의 주소를 전달할 수 있다.
void 포인터 : 정의되지 않은 포인터, 원칙적으로는 stepof 연산을 하여도 변화가 없어야 하지만, 실제로는 다르다.
사용하는 이유는 범용적인 포인터로, 모든 형태의 포인터로 타입 캐스팅이 가능하다.
동적 할당
Heap 메모리 : 동적으로 할당되는 메모리 - Stack 메모리와 비교된다.
malloc(Byte 단위), free(포인트 주소) 함수를 이용하여 메모리를 할당하거나, 해제할 수 있다.
반드시 free 해주어야 한다. (memory leakage 발생)
동적 할당 함수
- malloc : 동적 메모리 할당(기본)
- calloc : 초기화 작업 포함
- realloc : 원래 할당된 공간의 크기 변경
구조체, 유니온, 열거형
구조체, 배열, 유니온 등 : aggregation data <-> single data
strcut name{
type var1;
type var2;
type var3;
...
}
struct는 align 동작 때문에 빈 공간이 남을 수 있다. 설정으로 빈 공간을 없앨 수는 있으나 속도가 느려진다.
자기 참조 구조체 : 자기 자신을 참조하는 포인터를 가지는 구조체 -> linked list 구현의 핵심
공용체(union) : 공용체와 유사 하나 맴버 중 가장 큰 메모리를 가지는 자료형만큼 메모리를 차지하며, 맴버들이 그 메모리를 공유한다. => 임베디드 프로그래밍에서 어떻게 사용되는지는 다음에 확인
열거형(enum) : 변수에 저장할 수 있는 정수 값을 기호로 정의하여 나열한 것, default는 int 값이며, 0부터 할당된다.
typedef를 이용한 형의 재정의 : 가독성을 위하여
typedef from to
'VEDA 복습 > C, C++' 카테고리의 다른 글
VEDA 7일차 - C++ 프로그래밍 (0) | 2025.03.25 |
---|---|
VEDA 6일차 - C 프로그래밍 (0) | 2025.03.24 |
VEDA 4일차 - C 프로그래밍 (0) | 2025.03.20 |
VEDA 3일차 - C 프로그래밍 (0) | 2025.03.19 |
VEDA 2일차 - C 프로그래밍 (0) | 2025.03.18 |