PROGRAMMING LANGUAGE/C

14강 포인터

JC0 2021. 9. 15. 17:01

포인터에 대해서 알아보자.

포인터도 변수다. 포인터는 변수의 주소값을 저장하는 변수다.

어떤 변수를 선언하고 그 주소값을 저장해서 가져오기 편하게 만들기 위해서 포인터를 사용한다.

컴퓨터는 값으로 어떤 변수를 가져올 수 없다. 만약 컴퓨터가 변수를 값으로 구분한다면

많은 변수들 중에서 같은 값을 가진 변수가 있다면 그 둘은 다른 변수지만 같은 변수라고

판단하게 된다. 

포인터에 대해서 자세히 알아보기 전에 주소 연산자에 대해서 다뤄보자.

주소 연산자란 변수의 주소 값을 구하기 위해 사용되는 연산자이다. 이를 통해 변수가 메모리의

어느 곳에 위치하고 있는지 알 수 있다. 

void main()

{
    int num = 100;
    

    printf("변수 num의 값: %d\n", num);
    printf("변수 num의 주소값: %p\n", &num);

}

int 데이터 타입 num 변수에 100을 대입하고 주소연산자(&)를 사용하여 &num을 출력하면

num이 저장된 메모리 위치를 알 수 있다. 이 주소값은 실행 시 마다 바뀐다. 왜냐하면 변수가

저장된 메모리는 실행 시 정해지고 프로그램이 종료하면서 다시 메모리값을 돌려주기 떄문이다.

 

 

#include <stdio.h>

void main()
{
	int* numPtr;
	int num1 = 10;

	numPtr = &num1;

	printf("%p\n", numPtr);
	printf("%p\n", &num1);

	return 0;
}

이 코드는 포인터의 사용법을 알려준다.  참조 연산자 *을 사용하여 *numPtr 포인터 변수를 선언한다.

num1 변수를 선언하고 10이라는 상수를 대입하고 &num 주소 값을 numptr 포인터 변수에 저장한다.

numptr을 출력하면 &num1과 같은 결과가 나온다.

포인터는 주소 값을 이용하기 위한 변수인 것이다. 

 

 

포인터의 참조를 배워보자.

#include <stdio.h>

void main()
{
	int* numPtr;
	int num1 = 10;

	numPtr = &num1;

	printf("%p\n", numPtr);   // 포인터를 이용
	printf("%p\n", &num1);	// 주소 연산자를 이용
	printf("%d\n", *numPtr);  // 포인터의 포인터
    printf("%d\n", sizeof(numPtr)); // 포인터의 크기
	return 0;
}

포인터를 출력할 때 포인터의 왼쪽에 *연산자를 붙여주면 포인터의 포인터 즉 주소 값이 담고 있는

값을 나타낸다. 

포인터 = 포인터가 가리키고 있는 변수의 주소 값

포인터의 포인터 = 포인터가 가르키고 있는 변수의 주소의 값

포인터의 크기는 컴파일러에 따라서 결정된다.