본문 바로가기

IT/C언어

[C언어] 포인터 변수의 선언


[C언어] 포인터 변수의 선언






안녕하세요 지토우에요.

지난 시간에는 포인터가 어떤 것인지에 대해 간략하게 배웠지요?

오늘은 포인터 변수의 선언과 사용에 대해 배울 것입니다.

그럼 오늘도 열공합시다 ^0^







1. 포인터 변수의 선언



포인터 변수도 변수이므로 사용하기 위해서는 선언해야 합니다.

다음은 포인터 변수의 선언 형식을 나타내고 있습니다.

포인터 변수의 선언은 자료형 다음에 * 연산자를 붙이고 포인터 변수의 이름을 쓰는 식입니다.






자료형                           포인터 변수의 자료형을 지정, 자료형 다음에 * 연산자를 붙임

포인터 변수 이름           주소를 저장할 변수의 이름을 지정

NULL 포인터 설정         포인터 변수 선언 시 NULL 로 초기화



NULL 포인터란 무엇일까요?

포인터 변수에 아무 주소도 저장하지 않겠다는 의미입니다.

NULL은 '널' 이라고 읽습니다.

또, 사용할 때는 항상 대문자를 사용해야 합니다.





이 코드에서 int* p1, char* p2, double* p3의 의미는 무엇일까요?

int* p1 은 p1에 int 형 주소를 저장하는 포인터 변수를 선언한 것입니다.

나머지 char* p2와 double* p3도 같은 연장선이라 보면 되겠습니다.


일반 변수의 선언과 달리 포인터 변수는 자료형 뒤에 *을 붙이고, NULL포인터로 초기화 해야 합니다.


그렇다면 이제 예제를 분석해봅시다.




4행과 5행에서 포인터 변수를 선언했습니다.

선언한 포인터 변수의 이름은 각각 cp, ip 입니다.

둘 다 4바이트입니다.

자료형 다음에 * 연산자가 붙어 있는 변수는 모두 포인터 변수라고 한다는 점을 알아두세요!


7행과 &cp(변수 cp의 주소, 40fac4), cp(변수 cp의 메모리 공간, 0), *&cp(변수 cp의 메모리 공간, 0)을 출력합니다.

여기서 cp와 *&cp는 같은 메모리 공간입니다.


8행에서는 &ip(변수 ip의 주소, 40fab8), ip(변수 ip의 메모리 공간, 0), *&ip(변수 ip의 메모리 공간, 0)을 출력합니다.

출력 결과를 보면 현재 cp와 ip에는 데이터가 0이 저장되어 있습니다.

0이 저장된 이유는 4행과 5행에서 포인터 변수 선언 시 NULL로 초기화했기 때문입니다.

NULL은 아스키 값으로 0입니다.


10행과 11행에서, 포인터 변수의 크기는 모두 4바이트 입니다.

32비트 운영체제를 기준으로, 포인터 변수는 모두 4바이트의 크기를 가집니다.


또, 다양한 타입의 포인터 변수가 왜 있는지에 대해 알아야 하는데요.

바로 포인터 변수로 변수를 참조하는 경우 몇 바이트씩 참조해야 하는지를 알려주기 위해서 입니다.

char* 형 포인터 변수 cp는 변수를 참조할 때 1바이트씩,

int* 형 포인터 변수는 변수 ip는 변수를 참조할 때 4바이트씩 주소를 참조하라는 뜻이지요.


아래는 위의 소스 코드의 결과입니다.