인프런 커뮤니티 질문&답변

TaeChoon Pakr님의 프로필 이미지
TaeChoon Pakr

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.9 포인터 연산 총정리

%td?

작성

·

166

1

1.printf("%td",ptr3-ptr1);

에서 

ptr3-ptr1의 값의 서식지정자가 %d가 아니라 %td라는것은 ptr3-ptr1 의 자료형이 주소의 자료형처럼 정수이기는 하나 완벽히 정수는 아닌 그런 개념인건가요 ? 

아니면 그냥 %d로 서식이 지정되는 정수형인건가요?

2. 포인터끼리의 동치여부를 비교할때 캐스팅하면 오류가 사라지는경우에서 질문있습니다.

int a=5;

int ptr_a=&a;

double d=3.14;

double*ptr_d=&d;

if(ptr_a == ptr_d ) 에서 워닝을 막기위해 

if(ptr_a == (int*)ptr_d) 또는 if((void*)ptr_a == (void*)ptr_d) 이렇게 캐스팅 한다 하셨는데

그럼 이렇게 포인터를 캐스팅시 포인터의 대상이 되는 변수는 캐스팅하는 자료형으로 자료형과 값 모두 변해버리나요?

(ptr_d 를 int 로 캐스팅시 변수 d는 int형이되고 값이 3으로 변경 . ptr_a 와 ptr_d 를 void로 캐스팅시 변수 a와 b는 void형이되고..그런데 void형이라는 변수가있나요?? )

감사합니다. 

답변 1

1

홍정모님의 프로필 이미지
홍정모
지식공유자

1. 아래와 같은 질문이네요.

2. 워닝을 읽어보시면 아마 설명이 있었을겁니다. 보통 주소를 비교하는 경우는 위험하기 때문에 주소의 비교가 필요하도록 프로그래밍하는 것은 피하는게 좋습니다.

TaeChoon Pakr님의 프로필 이미지
TaeChoon Pakr

작성한 질문수

질문하기