Nagie's DevStory
[C] 32. 다양한 포인터 ( 2 ) 본문
728x90
3. 포인터 배열
포인터 역시 메모리 주소를 담는 변수기 때문에 배열을 생성할 수 있다.
주로 문자열을 다룰 때 사용된다 아래의 코드 처럼 사용할 수 있며 포인터 배열 역시
기존의 배열처럼 다차원으로 생성이 가능하지만 추천하진 않는다.
사용 예시는 아래와 같다.
//기본 사용방법
int* pPtr[2];
pPtr[0] = (int*)malloc(sizeof(int) * 3);
pPtr[1] = (int*)malloc(sizeof(int) * 6);
//문자열 다루기
char* pPtr[3] = {"Hello,","World","!!!"};
//또는
char* pPtr[3];
pPtr[0] = "Hello,";
pPtr[1] = "World";
pPtr[2] = "!!!";
4. 함수 포인터
함수의 메모리 주소를 저장하고 호출할 때 사용한다.
함수도 변수처럼 메모리 공간에 존재하기 때문에 이런 접근이 가능하다.
사용 예시는 아래와 같다.
//기본 사용법
//리턴 데이터 타입 (*함수 포인터명)(인자)
int (*pFunction)(int,int);
//사용 예시
int plus(int Num1, int Num2) {
return Num1 + Num2;
}
int main() {
int (*func)(int, int);
int nResult;
func = plus;
nResult = plus(1, 2);
printf_s(“%d \n”, nResult);
}
5. void 포인터
데이터 타입과는 관계없이 해당 변수의 메모리 주소를 담는다.
다만 해당 변수의 값을 참조하려면 형 변환(Type Casting)을 무조건 해줘야 한다.
대표적으로 사용하는 곳이 malloc()이며 void 포인터의 사용 예시는 생략한다.
6. 배열 포인터
열의 개수가 고정된 이차원 배열의 메모리 주소를 저장하며 임의의 행을 생성해 다룰 수 있다.
다만 코드의 형태가 직관적이지 않아 사용하는 걸 권장하지 않는다.
아래는 배열 포인터의 사용 예시이다.
//이차원 배열 다루기
int nArray[2][3] = { {10, 20, 30}, {100, 200, 300}};
int(*pPtr)[3];
pPtr = nArray;
printf_s("%d %d %d \n", pPtr[0][0], pPtr[1][1] ,pPtr[0][2]);
//함수의 인자를 이차원 배열로 넘길때
void plus(int (*pPtr)[3],int nCount) {
//생략
}
//열의 개수가 고정인 이차원 배열을 생성할때
int(*pPtr)[2];
pPtr = (int(*)[2])malloc(sizeof(int[2]) * 2);
pPtr[0][0] = 1;
pPtr[0][1] = 2;
pPtr[1][0] = 3;
pPtr[1][1] = 4;
printf_s("%d %d %d %d", pPtr[0][0], pPtr[0][1], pPtr[1][0], pPtr[1][1]);
free(pPtr);
배열 포인터를 마지막으로 6가지의 포인터들을 알아봤다.
배열 포인터를 제외한 나머지 포인터들은 C 프로그래머로 살아가려면 본인의 수족처럼 사용할 줄 알아야 한다.
728x90
Comments