티스토리 뷰

c언어 포인터 변수, 역참조 연산자, 주소 연산자에 대한 정리

포인터 변수의 역참조 연산자(*)와 주소 연산자(&)에 대한 정리.

역참조 연산자 ( * )

포인터의 역참조 연산자 * 은 주소를 받아서 그 주소에 저장된 값을 가져오는 연산자이다. 즉 포인터 주소에 있는 데이터를 읽기 위해서 사용한다. 반대로 포인터 주소에 데이터를 쓸 때에도 사용된다.

int *address_of_data = &address;

int data = *address_of_data;

주소 연산자 ( & )

데이터를 받아서 이 데이터가 저장된 주소를 가져온다. 가령 포인터 변수 int x; 로 선언한 뒤 &x 는 x 포인터 변수의 주소를 가리킨다. 포인터 값이 아니다! &x라 쓴 것을 'x에 대한 포인터'라 부른다.

char array[] = "hello world"; 배열 array 변수는 문자열에 있는 첫번째 문자의 주소를 가리킨다. 실제로 포인터 변수이다.

포인터 배열이란

일련의 메모리 주소를 배열에 저장한 배열을 말한다. 즉 포인터를 저장한 배열이다.

char *array_pointers[] = {"name_01", "name_02", "name_03"}; <- 여기서 이름은 각 문자열 상수를 가리키는 포인터이다.

포인터 정리

변수의 주소는 메모리 어디에서 변수를 찾을 것인지 알려준다. 따라서 이런 변수의 주소를 포인터라 부르게 된다. 포인터가 메모리에 있는 변수를 가리키기 때문에 그렇다. 포인터 변수는 메모리 주소를 저장하는 변수이다. 그리고 포인터 변수를 정의 할 때에는 포인터가 가리키는 주소에 어떤 종류의 데이터가 저장되는지 알려주어야 한다.