Nagie's DevStory

[C] 32. 다양한 포인터 ( 2 ) 본문

Programming/C

[C] 32. 다양한 포인터 ( 2 )

Nagie 2023. 10. 4. 00:03
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