이중포인터(double pointer) : 포인터를 가리키는 포인터
포인터 연산자 하나 당 화살표 하나(그림그려서 쉽게 할 수 있음. 같은 형끼리 비교, 대입연산)
주소에 의한 호출 : 값 변경 가능
값에 의한 호출 : 함수가 끝나면 메모리 삭제됨.
포인터배열(array of pointers)(많이 씀)
배열의 원소가 포인터인것.
int *ap[10];
[]연산자가 *연산자보다 우선순위가 높으므로 ap는 먼저 배열이되고 그 후 int 형 포인터가 된다.
배열 안에 int *변수가 들어간 것.
정수형 포인터 배열
int a=10, b=20, c= 30, d=40, e=50;
int *api[5] = {&a,&b,&c,&d,&e};
이런식으로 포인터배열 하나당 같은 형의 변수 하나를 가리킬 수 있음.
2차원 배열에 문자열을 저장
char fruits[4][10]; = {
"apple",
"blueberry",
"orange",
"melon"
};
-> 낭비되는 공간이 생김.
문자형 포인터 배열(ragged 배열)
가변배열
char* fruits[]={
"apple",
"blueberry",
"orange",
"melon"
};
-> 필요한만큼만 메모리가 사용됨.(메모리를 절약할 수 있음)
문자열 배열 예제
n = fruits 의 sizeof / fruits[0]의 sizeof
sizeof(fruits)는 4byte*인덱스의 개수 이고 sizeof(fruits)는 포인터이기 때문에 4byte이다.
문자열은 *char형 이므로 %s를 써줘야 한다.
배열포인터(a pointer to an array)(포인터배열 x) 잘 안씀
기본형을 원소로 하는 배열을 가리키는 포인터
int (*pa)[10];
괄호를 쳐서 포인터가 먼저 된다. -> int 의 배열을 가리키는 포인터가 된다.
pa는 int[10]을 가리키는 포인터가 된다.
배열의 각각의 원소는 int형, pa는 이 배열을 가리킴
배열은 맨 오른쪽에서부터 하위차수 -> 상위차수
함수 포인터(function pointer)
함수를 가리키는 포인터
함수의 시작주소를 포인터가 가리킴.
함수도 메모리에 코드 형태로 존재하므로 주소를 가진다. 메모리 [스택|힙|상수|코드]
함수 포인터 정의
함수와 함수 포인터의 반환형과 매개변수가 같아야함.
예제
함수 포인터의 배열
int (*pf[5]) (int, int);
1. []연산자가 *연산자보다 우선순위가 높으므로 pf는 먼저 배열이 된다.
2. 어떤 배열이냐면 포인터들의 배열이 된다.
3. 어떤 포인터냐면 함수를 가리키는 포인터가 된다.
'학과 공부 > C & C++' 카테고리의 다른 글
[C++] fill 함수에 대해 알아보자 (0) | 2024.02.22 |
---|---|
포인터배열과 배열포인터 예제,이중포인터 예제 배열과 포인터[C프로그래밍] (2) | 2023.11.18 |
union,enum,typedef[C프로그래밍] (0) | 2023.11.14 |
구조체(2)[C프로그래밍] (1) | 2023.11.03 |
구조체(1)[C프로그래밍] (0) | 2023.11.02 |