포인터와 자료형
포인터를 선언할 때 자료형 규칙
- 포인터는 자신이 가리키는 메모리의 자료형과 일치하는 자료형으로 선언해야 한다.
1
2
3
4
5
| int a = 10;
int *p = &a; // 원 자료형 int -> 포인터 자료형 int
float b = 20.0f;
float *q = &b; // 원 자료형 float -> 포인터 자료형 float
|
- 만약 원래의 자료형과 포인터의 형을 다르게 할 경우, 경고가 발생한다.
1
2
3
4
| int a = 10;
float *q = &a;
printf("%d", *q);
// 출력 : 0
|
1
| warning: format specifies type 'int' but the argument has type 'float' [-Wformat]
|
void 형 포인터
- 자료형이 정해지지 않은 범용 포인터
- 자료형에 관계 없이 어떤 변수든 가리킬 수 있다.
1
2
| // 기본 문법
void *포인터변수명;
|
1
2
3
4
5
| // 예시
int x;
float y;
void *p = &x; // int 형 변수를 가리키는 포인터
p = &y; // float 형 변수를 가리키는 포인터
|
void 형 포인터를 참조하기
- 단, 자료형이 없기 때문에 void 형 포인터를 직접 사용해 대상을 참조할 수 없다.
- 참조 대상의 자료형에 맞게 포인터 형변환을 명시적으로 수행해야 한다.
1
2
3
| int x = 10;
void *p = &x;
printf("%d", *p); // 에러 발생
|
1
| 불완전한 형식 "void"은(는) 허용되지 않음
|
1
2
3
4
5
6
7
8
9
| void void_pointer(){
int a = 100;
char b = 'b';
void *p = NULL;
p = &a;
printf("*p = %d\n", *(int *)p);
p = &b;
printf("*p = %c\n", *(char *)p);
}
|
1
2
3
| / 출력
// *p = 100
// *p = b
|
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments