달력

3

« 2025/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 10. 17. 18:52

포인터와 캐스트 공부2010. 10. 17. 18:52


★ 포인터와 캐스트

float *fp 선언후에
fp=3;
이라고 한 뒤 컴파일 하면 warning이 뜬다. (파일 실행에는 이상 없음.)

왼쪽은 자료형이 float* 형이고
오른쪽 '3' 은 자동적으로 int형이라 양쪽의 자료형이 일치하지 않는다.

포인터형에 값을 초기화해줄때는 자료형이 같지 않다면 컴파일시 warning이 뜸.
 >> 파일 실행에는 이상이 없음.

warning을 없애고 싶다면 양쪽의 자료형을 통일시켜주면 된다.

fp = (float*)3;

이렇게 하면 3이 자동으적으로 float형 포인터로 형 변환이 일어나서 warning이 없어진다.

만약에
int x;
int *xp;
xp = &x;
라고 정의를 했을 때에는
warning이 뜨지 않는다.
왼쪽의 xp는 *int 형이고
오른쪽의 x는 int형인데, &이 *로 인식되기때문에 결국 *int 형으로 인식되고
왼쪽과 오른쪽의 형이 같기 때문에 warning 이 뜨지 않는다.


변수명 앞에 * 가 있으면
ex) *iNum;

 >> 1. 해당 변수가 있는지 확인
 >> 2. 해당 변수가 포인터형인지 확인
 >> 3. 포인터형이 아니라면 곱셈으로 치부
 >> 곱셈은 다항연산자라, 항이 2개 필요 / 현재 항은 iNum하나만...
 >> 컴파일시 에러 발생

★ iNum이 포인터형이라면 컴파일시에러 없음
 ex) int iNum*;
 *iNum;

포인터형 앞에 * 을 붙이면 해당 주소가 된다.

:
Posted by 투잌