포인터는 다른 변수의 주소값을 가지는 특별한 변수이다.
*는 포인터의 내용 연산자이다.
&는 포인터의 주소 연산자이다.
변수 p는 포인터 변수이며, 정수형의 값을 가지는 변수에 대한 주소를 가진다.
선언시에 사용되는 *는 내용 연산자가 아니다.
곱하기, 나누기 등의 연산은 할 수 없다.
프로그램 실행시에 자료형이 결정되는 경우에 사용한다. 저장하기 전에 명식적 형변환이 필요하다.
p : 기억공간 주소.
*p : 주소 p에 수록된 주소.
**p : 주소 *p에 수록된 int형 데이터.
*는 포인터의 내용 연산자이다.
&는 포인터의 주소 연산자이다.
일반 변수 | 포인터 변수 | |
선언 | int a; // 정수형 변수 a | int *a; // 포인터 변수 a를 종수형으로 선언 |
값 할당 | int a = 100; // 변수 a에 100할당 | *a = 100; // a 주소에 100 할당 |
주소 참조 | &a; // 변수 a의 주소 | a; // 주소 |
주소 연산 | 할 수 없음 | a--; // 포인터를 1 감소 |
선언
1 자료형* 포인터변수명;
1 int* p;
변수 p는 포인터 변수이며, 정수형의 값을 가지는 변수에 대한 주소를 가진다.
선언시에 사용되는 *는 내용 연산자가 아니다.
초기화
포인터 변수는 반드시 초기화 후에 사용해야 한다. 1 int* p;
2 int i;
3 p = &i;
포인터 변수의 크기
포인터 변수의 자료형은 포인터가 가르키는 변수의 자료형이다. 포인터 변수의 크기는 포인터가 가르키는 자료형의 크기와 무관하다. 1 #include <stdio.h>
2
3 /*
4 포인터의 크기
5 */
6
7 int main ()
8 {
9 int i = 4;
10 int* p_i = &i;
11 char ch = 'a';
12 char* p_ch = &ch;
13 double dbl = 1.0;
14 double* p_dbl = &dbl;
15
16 printf("%d\n", sizeof(p_i));
17 printf("%d\n", sizeof(p_ch));
18 printf("%d\n", sizeof(p_dbl));
19
20 system("PAUSE");
21 return 0;
22 }
배열과 포인터
배열 arr[]의 이름인 arr는 배열의 첫번째 요소인 arr[0]의 주소이다. 따라서, data==&data[0]이다.포인터 연산
포인터에 저장된 주소값을 변경하는 연산이다. 포인터의 값을 증감시킬 때 실제로 증감되는 주소는 포인터변수의 자료형에 따라 달라진다.곱하기, 나누기 등의 연산은 할 수 없다.
void형 포인터
1 void* 포인터이름;
프로그램 실행시에 자료형이 결정되는 경우에 사용한다. 저장하기 전에 명식적 형변환이 필요하다.
char형 포인터
문자열 처리에 char형 포인터를 사용할 수 있다.
1 char* ch = "CHARACTER";
→ 1 char ch[] = "CHARACTER";
이중포인터
1 int** p;
p : 기억공간 주소.
*p : 주소 p에 수록된 주소.
**p : 주소 *p에 수록된 int형 데이터.
포인터 배열
1 char *name1, *name2, name3;
→ 1 char* name[3];
함수 포인터
1 자료형(*함수포인터이름)(매개변수목록);
1 int add(int, int);
2 int (*f1) (int x, int y);
3 int add (int a, int b) {return a+b; }
4
5 f1 = add;
6 f1 = &add;
7 f1 = add(); // X
8 f1 = &add(); // X
원거리 주소 변수
1 자료형 far* 변수;
댓글
댓글 쓰기