[C] 포인터

꾸준희
|2018. 8. 21. 10:41
728x90
반응형




C언어에서 포인터는 변수의 메모리 주소를 이용하여 함수를 넘나들며 값을 저장하기 위해 사용된다. 


즉, 포인터는 값의 주소를 저장하기 위해 사용된다.




포인터 변수는 다음과 같이 * ( Asterisk, 애스터리스크)를 사용하여 선언된다. 


* 의 위치에 따른 차이는 없으며 모두 같은 뜻이다.


int* numPtr;
int * numPtr;
int *numPtr;



포인터 변수를 선언했다면 아래와 같이 &로 변수의 주소를 구해서 포인터 변수에 저장한다. 


numPtr = #



즉, 포인터는 메모리의 특정 위치를 가리킬 때 사용한다. 







아래 코드는 numPtr 이라는 포인터 변수가 int 형 변수 num 이 있는 공간을 가르키는 예제이다. 


numPtr이 가르키는 값을 변경할 경우 변수 num의 값도 당연히 변경된다.



#include <stdio.h>

int main() {

	int *numPtr;	// 포인터 변수 선언
	int num = 10;	// int형 변수 선언 후 상수 10 저장

	numPtr = &num;	// num의 메모리 주소를 포인터 변수에 저장


	printf("포인터 변수의 값 %p\n", numPtr);			// 실행 시 마다 달라짐

	printf("포인터 변수가 가르키는 값 %d\n", *numPtr);

	printf("포인터 변수의 주소 시작 값 %d\n", numPtr);	// 실행 시 마다 달라짐

	printf("포인터 변수의 주소 끝 값 %d\n\n", &numPtr);	// 실행 시 마다 달라짐
	

	printf("num 변수의 메모리 주소 %p\n", &num);		// 실행 시 마다 달라짐

	printf("num 변수의 값 %d\n\n", num);

	
	*numPtr = 5000; // 포인터 변수가 가르키는 값 변경 

	printf("포인터 변수가 가르키는 값 변경 후 numPtr = %d\n", *numPtr);
	printf("변경된 num = %d\n", num);

	return 0;
}




실행결과








그리고 포인터의 초기 값을 설정해주어야한다.


포인터를 선언만하고 초기화해주지 않으면 내부는 쓰레기 값으로 채워지게 된다. 


즉, 그 포인터가 어디를 가리킬지 알 수 없게 되기 때문에 아래와 같이 0(NULL) 값으로 초기화 할 수 있다.


참고로 NULL의 아스키 코드 값은 0이다.


int main() {

    int *numPtr1 = 0;
    int *numPtr2 = NULL;

}






* 값에 의한 호출, 참조에 의한 호출 참고자료 


* 이중 포인터 참고자료 1 : https://dojang.io/mod/page/view.php?id=553


* 이중 포인터 참고자료 2 : https://dojang.io/mod/page/view.php?id=279




참고자료 1 : http://enter.tistory.com/99

참고자료 2 : https://dojang.io/mod/page/view.php?id=275


728x90
반응형