C,C++

C 포인터

코춘대길 2021. 6. 6. 14:58
728x90

들어가기 전 포인터란 무엇인가에 대해 간단하게 알아보자면 배열이나 값의 메모리 속 주소를 저장해주는 것입니다.

#include <stdio.h>

int main(){
	int *point;
    	int* point1;
    	int * point2;
    // 포인터 선언
    	int n = 10;
    //일반 변수
 	point = &n;
    printf("%d", point);

    }

들어가기 전 포인터와 이 간단한 코드에 대해서 이해하기 위해서 몇가지를 알려드리겠습니다.

참조연산자란?

참조 연산자는 * 을 말하며 포인터의 이름이나 변수의 주소 앞에 사용하여,
포인터에 가리키는 주소에 저장된 값을 반환합니다. 

위 코드에서는 *point , 등으로 포인터 변수를 만드는데 사용해 주었습니다만 3개의 포인터 변수들에 참조연산자의 위치가 모두 다른것을 볼 수 있으신데 이렇게 하더라도 포인터 변수는 아무런 문제 없이 생성이 된다는 것을 알 수 있습니다.

주소연산자란?

주소 연산자는 &(앰퍼샌드) 을 말하며 변수의 이름앞에 사용되어 변수의 주소값을 반환합니다.
위 코드에서는 포인터 변수 안에 n의 주소값을 넣기 위해 point = &n의 형식으로 사용된 것을 볼 수 있습니다.

위 개념들을 알았다면 기초부터 포인터에 대해 알아보도록 하겠습니다.

포인터의 선언

포인터의 선언은 위에서 보다시피 다른 변수들과 비슷하게 [(변수형)]+[ *(참조연산자)]+[변수이름] 으로 선언해주시면 됩니다. ex> int *num; 

위 과정들을 알았고 그렇다면 위의 코드의 실행결과는 어떻게 될까요

이렇게 n의 주소값이 출력 됩니다. 주소연산자로 n의 주소를 포인터 변수에 넣어주었기 때문에 이렇게 출력이 되는 것입니다.

#include <stdio.h>

int main(){
	int *point;
    	
    // 포인터 선언
    	int n = 10;
    //일반 변수
 	point = &n;
    printf("%d", *point);

    }

이 코드의 출력값을 어떻게 될까요

n의 입력값이 출력된다.

에구머니나 n의 입력값이 출력이 되네요. 그 이유는 포인터의 참조연산자에 있습니다. 아까 전의 코드에서는 point를 출력했기 때문에 n의 주소값이 출력이 됐습니다. 하지만 여기서 참조연산자를 사용해주어서 n의 주소값에 저장되어 있는 입력값을 참조해 올 수 있던 겁니다. 

 

#include <stdio.h>


int main() {
    int * point;
    int *point1;
    int* point2;
    // 포인터 선언
    int n = 10;
    point = &n;
    point1 = point;
    printf("%d", *point1);

}

따라서 이렇게 하더라도 똑같이 n의 값 10이 나오는 마법을 볼 수 있습니다.