프로그래밍/C,C++

[C/C++] Swap 예제를 통해 포인터 맛보기

gameObject 2023. 6. 7. 20:36
728x90

포인터

변수는 메모리에 할당되기때문에 주소값이 존재합니다.

포인터는 변수의 주소값을 저장하기 위해서 사용합니다.

변수는 주소값과 해당 주소값에 저장되어있는 할당된 값으로 이루어져있습니다.

 

정수형 포인터는 아래와 같이

[ 데이터 타입 ][ * ] [ 변수명 ] [ ; ]

int * ptrNumber ;

이렇게 구성되어있습니다.

 

주소값을 대입할때는 동일한 데이터 타입으로 대입해야 하며, &기호를 사용합니다.

ptrNumber = &number;

number 변수의 주소를 ptrNumber에게 매칭합니다.

이 과정을 참조한다고 표현합니다.

 

주소값이 가지고 있는 실제로 할당된 값에 접글할 때는 *기호를 사용합니다.

printf("ptrNumber가 갖고있는 값: %d \n", *ptrNumber);

이 과정을 역참조한다고 표현합니다.

 

예제1

ptrNumber (포인터변수)에 number의 주소값(&number)를 입력해주고

number, &number, ptrNumber,*ptrNumber, &ptrNumber를 출력해보았습니다.

 

number의 값과 *ptrNumber의 값이 일치하고, &number의 값과 ptrNumber의 값이 일치하는것을 보아

pointer가 어떤식으로 사용되는지 알 수 있습니다. &ptrNumber의 값이 다른 이유는 포인터 변수의 주소이기 때문입니다.

예제2

Hello를 입력 후 배열 0번째와 배열 4번째를 교체해보는 예제입니다.

 

아래 함수 두개중 Swap을 통해 배열 0번째와 4번째를 교체하려고 할 경우, 지역변수로써 함수가 끝날때 함께 값이 사라져 Hello로 출력됩니다.

Swap2를 통해 포인터를 이용하여 주소값을 받아 0번째와 4번째를 교체할 경우, 주소값을 받았기 때문에 바로 값이 교체가 되며

oellH로 출력됩니다.

 

이로써 포인터가 어떤식으로 쓰이는지 알 수 있습니다.

#include <iostream>
#include <stdio.h>

using namespace std;

// void Description001();
// void Description002();
// void mission();
void Swap(char firstChar, char secondChar);
void Swap2(char* firstChar, char* secondChar);

int main()
{
    char str[10] = "Hello";

    //Hello
    Swap(str[0], str[4]);
    printf("%s ",str);

    //oellH
    Swap2(&str[0], &str[4]);
    printf("%s ",str);
}

// 포인터를 쓰지 않고 입력을 받은값을 교체하는 함수
void Swap(char firstChar, char secondChar)
{
    char temp = '\0';

    temp = firstChar;
    firstChar = secondChar;
    secondChar = temp;
}

// 포인터를 사용하여 주소를 입력받아 교체하는 함수
void Swap2(char* firstChar, char* secondChar)
{
    char temp = '\0';

    temp = *firstChar;
    *firstChar = *secondChar;
    *secondChar = temp;
}
728x90