포인터의 대입 규칙
1. 가리키는 변수의 형태가 같을 때만 대입 -> 가리키는 자료형이 일치하지 않는 포인터의 대입을 시도하면 경고 메시지 발생
/*
* 허용되지 않는 포인터의 대입
*/
#include <stdio.h>
int main(void)
{
int a = 10; // 변수 선언과 초기화
int *p = &a; // 포인터 선언과 동시에 a를 가리키도록 초기화
double *pd; // double형 변수를 가리키는 포인터
pd = p; // 포인터 p 값을 포인터 pd에 대입
printf("%lf\n", *pd); // pd가 가리키는 변수의 값 출력
return 0;
}
- p와 pd는 둘 다 포인터지만 자료형이 다름
- 컴파일러는 p에 저장된 값을 int형 변수의 주소로 생각하고 pd에 저장된 값을 double형 변수의 주소로 생각. 따라서 pd에 p를 대입한 후 간접 참조 연산을 수행하면 변수 a에 할당된 영역 이후에 할당되지 않은 영역까지 사용하게 됨.
2. 형 변환을 사용한 포인터의 대입은 가능
double a = 3.4; // double형 변수 선언
double *pd = &a; // pd가 double형 변수 a를 가리키도록 초기화
int *pi; // int형 변수를 가리키는 포인터
pi = (int*)pd; // pd값을 형 변환해 pi에 대입
'C언어 > Study' 카테고리의 다른 글
[C언어] 입력받은 문장 소문자로 변경 (0) | 2024.09.04 |
---|---|
[C언어 공부] 포인터의 사용 이유 (0) | 2024.08.21 |
[C언어 공부] 주소와 포인터의 크기 (0) | 2024.08.21 |
[C언어 공부] 주소와 포인터 차이 (0) | 2024.08.21 |
[C언어 공부] const를 사용한 포인터 (0) | 2024.08.20 |