포인터 연산자
& 연산자(주소 연산자)
앰퍼샌드(ampersand) 번지 연산자
•
변수의 이름 앞에 사용
•
해당 변수의 주소값을 반환
* 연산자(참조 연산자)
•
포인터의 이름이나 주소 앞에 사용
•
포인터가 가리키는 주소에 저장된 값을 반환
포인터
주소값
•
해당 데이터가 저장된 메모리의 시작 주소
•
C언어 : 주소값을 1바이트 크기의 메모리 공간으로 나눠 표현
(int형 데이터는 4바이트지만, int형 데이터의 주소값은 시작 주소인 1바이트만을 가리킴)
포인터(포인터 변수)
•
메모리의 주소값을 저장하는 변수
•
마치 char형 변수가 문자를 저장하고 int형 변수가 정수를 저장하는 것처럼, 포인터는 주소값을 저장
int n = 100; // 변수 선언
int *ptr = &n; // 포인터 선언
C
복사
포인터 선언
타입 *포인터이름;
•
타입 : 포인터가 가리키고자 하는 변수의 타입 명시
•
포인터 이름 : 포인터가 선언된 후에 포인터에 접근하기 위해 사용
•
포인터 선언 후 참조 연산자(*)를 사용하기 전에 포인터는 반드시 초기화되어야 함. 그렇지 않으면 C 컴파일러는 초기화되지 않은 포인터에 참조 연산자를 사용한다고 오류를 발생시킴. 따라서 포인터 선언과 동시에 초기화를 하는 것이 좋음
int x = 7; // 변수 선언
int *ptr = &x; // 포인터 선언
int *pptr = &ptr; // 포인터 참조
C
복사
포인터 사용 예제
int num01 = 1234; // int형 변수 선언
double num02 = 3.14; // double형 변수 선언
int* ptr_num01 = &num01; // int형 변수를 가키리는 포인터 변수 선언
double* ptr_num02 = &num02; // double형 변수를 가리키는 포인터 변수 선언
// 중요) 포인터 변수는 주소값을 저장한다!!!!!!!!!!!
① printf("포인터의 크기는 %d입니다.\n", sizeof(ptr_num01));
② printf("포인터 ptr_num01이 가리키고 있는 주소값은 %#x입니다.\n", ptr_num01);
③ printf("포인터 ptr_num02가 가리키고 있는 주소값은 %#x입니다.\n", ptr_num02);
printf("포인터 ptr_num01이 가리키고 있는 주소에 저장된 값은 %d입니다.\n", *ptr_num01);
printf("포인터 ptr_num02가 가리키고 있는 주소에 저장된 값은 %f입니다.\n", *ptr_num02);
C
복사
실행 결과
포인터의 크기는 8입니다.
포인터 ptr_num01이 가리키고 있는 주소값은 0x7c255e4입니다.
포인터 ptr_num02가 가리키고 있는 주소값은 0x7c255e8입니다.
포인터 ptr_num01이 가리키고 있는 주소에 저장된 값은 1234입니다.
포인터 ptr_num02가 가리키고 있는 주소에 저장된 값은 3.140000입니다.
참고 자료




