////
Search

포인터, & 연산자, * 연산자

포인터 연산자

& 연산자(주소 연산자)

앰퍼샌드(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입니다.
참고 자료