-
C언어 포인터(pointer)Visual Studio/C 기초 2012. 9. 3. 22:53
이번엔 아주아주 중요한 포인터에 대해 알아보겠습니다.
포인터에 대해
먼저, 변수에 선언된 값은 메모리에 저장됩니다. 그 저장된 값의 주소를 가리키는 것을 포인터라 합니다. 컴퓨터의 메모리는 아주 많은 저장 구역으로 구성되고 각각의 위치는 주소에 의해 구분됩니다. 메모리의 주소는 0부터 최대 메모리의 양 까지입니다.
프로그램 내에서 변수의 이름을 사용할 때 변수는 해당 메모리 영역을 자동으로 사용하게 되는데, 실제로 메모리 영역의 주소가 사용되는 것 이지만 프로그래머는 이런 사실을 깨닫지도 못합니다.
어느 변수(pnt)가 있다고 칩시다. 먼저 변수 pnt를 선언을 해봅시다.
int pnt;
그다음, pnt의 주소를 가리킬 포인터를 생성시킵니다.
int *thr;
포인터는 *를 붙여주면 됩니다.(포인터의 이름은 아무 거나 하셔도 됩니다. 그다음 포인터와 pnt 변수를 연결시켜 줍니다.
thr = &pnt; // 연산자&를 연결시킬 변수 앞에 써주시면 됩니다.
printf("%d", pnt)
printf("%d", *thr) //이 두 문장은 같은 결과를 나타냅니다.
변수의 이름을 통해 변수의 값을 사용하는 방법을 직접 사용이라고 하고, 변수에 대한 포인터를 통해 변수의 값을 사용하는 방법을 간접 사용이라 합니다.
int value = 1;
int *pnt;
pnt = &value;
printf("직접사용의 value 값 : %d\n",value);
printf("간접사용의 value 값 : %d\n",*pnt);이 것이 직접사용과 간접사용의 예입니다. 컴파일 하고 실행하면 두 개의 값이 모두 1이 나옵니다.
포인터와 배열을 동시에
포인터와 배열을 동시에 사용하면 RAM의 구조에 대해 좀 더 쉽게 다가갈 수 있습니다. 그렇다면 주소 값을 계산하기 위해 주소연산자를 사용할 필요가 없는 지에 대해 의문이 생기는데요, 배열의 이름은 포인터 상수입니다. 프로그램이 실행되는 동안 배열으 ㅣ주소는 변경될 수 없고 고정된 값을 가지게 됩니다.
연속적인 배열 요소의 주소 값을 출력하는 프로그램을 만들어 보겠습니다.
#include <stdio.h>
main(void) {
int i[10], x; //integer 형 배열을 선언하고 카운트할 변수 x를 선언합니다.
float f[10]; //float 형 배열을 선언합니다.
double q[10]; //double 형 배열을 선언합니다.
printf("\t\tInteger\t\tFloat\t\tDouble");
printf("\n===============================");
printf("============================");for(x=0;x<10;x++)
printf("\n요소 %d:\t\t%d\t\t%d\t\t%d",x,&i[x],&f[x],&q[x]);printf("\n===============================");
printf("============================\n");
}결과
여기에 저장된 값은 제 컴퓨터 RAM에 적힌 주소로서 사용자의 컴퓨터마다 다른 값이 나올 수 있습니다. 다음엔 포인터 연산에 대해 포스팅하겠습니다.
추천은 블로거에게 큰 힘이 됩니다'Visual Studio > C 기초' 카테고리의 다른 글
C언어 문자와 문자열, 문자열과 포인터, malloc() (0) 2012.09.05 C언어 포인터 연산 (Pointer arithmetic) (0) 2012.09.05 C언어 다차원 배열(Array) (0) 2012.09.03 C언어 1차원 배열(Array) (0) 2012.08.29 C언어 반복문(while, do-while, for) (0) 2012.08.28