2014-08-31 3 views
-2

나는 임베디드 C에서이 코드에 문제가있다. p를 일부 함수의 매개 변수로 전달하지만 "p"의 경우에는 작동하지 않으면 완벽하게 작동한다. 이 코드의 작동 방식을 자세히 이해하는 데 도움을주십시오.이 char 복사 작동 방법 : * (* ((char **) p)) ++ = ch; in c

+5

코드가있는 스 니펫을 게시하십시오. 당신이 그것을 기대하고 그 대신에 어떤 일이 생기는지 설명하십시오. – folkol

답변

2

포인터 p는 다음 문자로 (포인트 ** 숯불 캐스팅이 두 번 채널은 해당 위치에 복사 역 참조하고, *p은 증가한다.

나는 때문에 코드없이 (상상 모든 I입니다 "p이 로컬 인 경우"작동하지 않는 것은 p과 관련이 없으며 p 값과 해당 코드의 문맥적 의미와 관련이 있습니다. 코드가 작동하는지 여부는 전적으로 p은 이중 참조가 의도 한 위치로 분해되도록 유효한 값을 보유합니다.

정직하게 말하십시오 Wever에게, 당신은 너무 "똑똑"입니다, 같은 코드를 작성하지 않도록해야하고, Brian Kernighan과 같이 말했다 :

모두가 디버깅이 처음에 프로그램을 작성처럼 단단 두 배 알고있다. 만약 당신이 그것을 쓸 때 당신이 똑똑하다면 어떻게 그것을 디버깅 할 것입니까?

0

P는이 곳 ch에서, 두 times.After 역 참조 2 회를 ​​char**에 형태 캐스트와 역 참조한다 pointer.Initially를 숯불하는 포인터가 증가에 대해 이해하고, by1.Here를 증가하는 것이 copied.After입니다 같은 포인터, 다음을 이해하려고합니다. *p++*pp++과 같으며, *p(*p)++과 같지 않습니다. 이와 같이 포인터도 증가합니다. 사본 진술에 세분화 오류가 발생할 수 있습니다.