2016-12-02 3 views
5
나는 C에서 포인터를 배우고

아래에서 작동하고 어떻게포인터 할당과 증가가 예를

int main() 
{ 
    int x=30, *y, *z; 
    y=&x; 
    z=y; 
    *y++=*z++; 
    x++; 
    printf("x=%d, y=%p, z=%p\n", x, y, z); 
    return 0; 
} 

출력

x=31, y=0x7ffd6c3e1e70, z=0x7ffd6c3e1e70 

yz 약 조금 혼란 스러워요 변수 x의 다음 정수 주소를 가리 킵니다. 이 라인은

*y++=*z++; 

사람이 한 줄이 C 이해하는 방법을 설명해 주시기 바랍니다 수있는 작업 방법 이해 할 수없는 무엇입니까?

답변

4

*y++=*z++; 실제로

*y = *z; 
y += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 
z += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 

그래서 뾰족한 값이 포인터는 하나 씩 증가, 영향을받지 않는 것을 의미한다.

+3

하위 작업의 순서가 미리 결정되지 않은 것을 제외하고. – pmg

+1

@pmg 당신 말이 맞습니다. 그 상황에 대한 모범이 있습니까? 나는 그것에 대해 읽는 것을 좋아합니다. – cokceken

+1

@pgm : 중요한 것은 컴파일러가 최종 두 문장을 재정렬 할 수 있다는 것입니다. – Bathsheba

관련 문제