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의 메모리 주소를 포인터 변수에 저장 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
반응형
'Programming > C | C++' 카테고리의 다른 글
[C, C++] 프로그램 수행시간 측정 (0) | 2018.09.03 |
---|---|
[C] printf 출력형식 %d %i %u %X %x %o %p %s %c %C %f %e %E %g %G (2) | 2018.08.29 |
[C] 파일 목록 가져오기 (2) | 2018.08.16 |
[C++] 전처리문의 종류 (0) | 2018.08.05 |
[C++] STL 정리 (0) | 2018.08.05 |