2013-10-24 3 views
0

나는 시험 공부를하고 있는데, 나는이 성명서를 보았다. 나는 몇 권의 책과 노트를 읽었으며 지금까지 나는 이것을 보지 못했고 무엇을 불러야 할지도 모릅니다. 그래서 대답을 찾을 수 없었습니다.포인터 유형의 구조 또는 포인터 인 구조?

여기 있습니다. 내가 기본 뭔가를 알고 해달라고하면

typedef struct { 
     unsigned a: 4; 
     unsigned b: 4; 
} byte, *pByte;// what does *pbyte means here? 

int main(){ 
pByte p = (pByte)x; // this is typecasting void pointer. how does it work with *pbyte 
byte temp; 
unsigned i; 

for(i = 0u; i < n; i++) { 
     temp = p[i]; //again I have no idea why we suddenly have array 
} 
} 

은 다시 ...... 물론 나는 아직도 제발 도와 :) 학습 원인 메신저를 잘 모릅니다. 감사.

byte b; 
pByte pB = &b; 

도 동일합니다 :

+0

당신은 심각하게 [이 질문을 처음부터 끝까지 읽어야합니다] (http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be-done- 극복하기), 특히 첫 번째 대답은 매우 놀랍습니다. – WhozCraig

+0

AFAIK이 매우 구체적인 "problem"이 두 언어에서 동일하기 때문에 [tag : c] 태그도 추가했습니다. – LihO

답변

1
typedef struct { 
    ... 
} byte, *pByte; 

당신이 그것을 다음과 같은 방법을 사용할 수 있도록 , 별칭 byte와 구조를 정의뿐만 아니라 byte*의 별칭 pByte을 정의
byte b; 
byte* pB = &b; 

그래서 (약간 의심되는 및 가능한 경우 먼저 장소에서 void*를 사용하여 피하려고한다)를 void 포인터 x 집결지 당신은 n 구조체의 배열의 첫 번째 요소를 가리키는 알고

pByte p = (pByte) x;   // casts x back to the correct type 
byte temp; 

temp = *(p + i); 
: 다음

temp = p[i]; 

가능하고 (포인터 연산)에 상당

+2

+1 짧은 및 직접. 좋은 설명. 대부분의 전문 C 프로그래머는 별표가 검토 자에게 가져 오는 안면의주의를 가리는 경향이 있으므로 포인터 유형 정의를 사용하지 않는다는 점에 유의해야합니다. 'Type * p;'는 포인터와 그 명백한 것을 선언합니다. 'TypeP p;'? 음 ... 그러나 그들은 특정한 품질을 가지고 있습니다. 'byte * pB, pC;'는 두 개의 포인터를 선언하지 않지만'pByte pB, pC;'는 * 않습니다. 그러나 이것은 포인터처럼'pC '를 사용하려고하면 컴파일되지 않을 것이기 때문에 상당한 이득은 아닙니다. 나는. 당신은 컴파일 타임에 그 실수를 잡을 것입니다 (보통). – WhozCraig

+0

@WhozCraig : 앨리어스가 포인터 (예 :'pByte','BytePtr' 등)의 별칭이라는 정보를 어떻게 든 전달하는 한, 여전히 괜찮은 것 같습니다. 그렇지 않으면 참으로 불쾌한 일입니다. – LihO

+0

@LihO :'*'는 그 정보를 훨씬 더 명확하게 전달합니다. –