유형에 대한 포인터를 다른 유형에 할당하는 것은 불법입니다. 예 :이 책의 내용 :포인터 변환
C How To Program 7 ed. pag. 둘 형 무효 *의없는 경우 다른 유형의 포인터에 한 종류의 포인터를 할당 299
일반적인 프로그래밍 오류 7.7 구문 오류입니다.
하거나 URL에서
다음 C11 표준에하지만 hower 기입된다
객체 유형에 대한 포인터는 다른 오브젝트 유형에 대한 포인터로 변환 될 수있다. 결과 포인터가 참조 된 형식에 맞도록 과 일치하지 않으면 동작이 정의되지 않습니다. 그렇지 않으면 다시 변환 할 때 결과는 과 원래 포인터를 비교해야합니다.
정렬 문제가있는 경우에만 동작이 정의되지 않았 음을 이해합니다.
사실 GCC 4.8 또는 cl 2013과 같은 컴파일러는 호환되지 않는 포인터 유형에서 할당 경고 만 내 보냅니다.
void 포인터에 대한 예외가 없습니다.
그래서 :
int a = 10;
float b = 100.22f;
int *p_a = &a;
float *p_f = &b;
p_a = p_f; // NOT ILLEGAL but WARNING
p_f = p_a; // converted back again. it still works
void *v_p = p_a; // NOT ILLEGAL NO WARNING
p_a = v_p; // converted back again. it still works
내가 잘 이해합니까? 또는 나는 무엇인가 놓치고 있냐?
P. "정렬 문제"의 예를 보여줄 수 있습니까?
아마도 이러한 "많은 책"이 무엇인지, 실제로 말한 내용을 말할 수 있습니까?사용중인 gcc의 버전과 경고의 의미 또한 어떤 연구를 수행했는지, 어떤 부분을 이해하지 못했는지 알려주십시오. – Useless
@Useless, 형식에 대한 포인터를 다른 형식의 포인터에 할당하는 것이 LEGAL인지 또는 void *로 처리하는지 이해할 수 없습니다. 표준을 위해 그것이 합법적이라는 것을 이해하는 것 같습니다. – xdevel2000
다른 유형의 다른 포인터를 지정하는 것이 "SYNTAX 오류"라고 책에 쓰여 있다면 책이 잘못되었습니다! – Jay