포인터

변수를 선언하면, 컴파일러는 변수에게 일련번호를 부여하고, 정해진 규칙에 의해 정해진 위치에 변수를 할당하게 됩니다. 할당하는 작업은 실제로 어떠한 작업을 수행하는 것은 아니기 때문에 디버거로 break point를 생성할 수는 없습니다. 또한, 해당 위치를 지정만 하기 때문에 과거에 쓰여진 기록이 있다면 해당 정보를 그대로 사용하게 됩니다. 일반적으로 쓰레기 값(Garbage value)이라고 하며, 활용에 주의를 요하기도 합니다.
 변수의 위치를 주소라고, C에서는 pointer라고 부릅니다. pointer는 주소입니다. pointer는 오직 C언어의 가장 큰 특징이며, 가장 강력한 무기입니다.

  1. 포인터의 의미와 문법에 대해 설명합니다.
  2. 컴파일된 바이너리 코드를 살펴보면, 명령어는 데이터를 저장하거나 불러올 때, 변수의 위치, 즉 주소를 이용해서 제어하게 됩니다.
  3. 포인터를 쓰지 않는 다른 언어들의 경우, 컴파일러에서 위치를 계산하기 때문에, 작성자(개발자)가 변수의 위치를 알 필요도 없고, 알 수도 없습니다.
  4. C 언어는 주소를 직접 계산하거나, 직접 참조 할 수도 있습니다. (선언하지 않은 주소도 참조 할 수 있습니다.)
  5. 또한 C언어는 해당 데이터의 주소를 공유하는 방식을 통해 직접 제어가 가능합니다.
  6. 포인터 문법은 선언과 참조시 *, 주소값을 가져올 땐 & 기호를 사용합니다.
  7. 포인터는 중첨되서 선언될 수 있습니다. 이중포인터, 삼중포인터, 그 이상도 가능합니다.
  8. 함수는 명령어 모음이고, 명령어는 숫자(데이터)이며, 데이터는 어딘가 저장되므로, 포인터를 갖습니다. 함수포인터는 함수를 제어하기 위한 변수입니다.

문법

C언어는 주소를 값으로 취급하여 저장, 연산 할 수 있습니다. 단, 주소를 다룰때는 주소라고 명시합니다.*을 사용합니다.

호출 시
변수타입 *포인터명;
예시
int *pIndex;

접근

해당 주소의 내용을 참고하고자 할 때, *을 사용합니다.

접근 시
*포인터명 = 저장할 값;
예시
*pIndex = 10;

변수의 주소값을 가져오고자 할 때는, &(and percent)를 사용합니다.

주소값 요청
&변수명;
예시
pIndex = &index;

함수 호출

변수를 전달하는 방법에 따라 Call by Value, Call by Reference, Call by Address가 있습니다.