2013-01-10 4 views
0
#include<stdio.h> 

int main() 
{ 
    int a=5,*b,*c; 

    b=&a; 
    c=b; 

    *b++=*c++; 

    printf(" %d %d %d\n",&a,b,c); 
} 

여기서 a의 주소가 x이면 b 및 c의 값은 모두 x + 4가됩니다. 하지만 두 ++ 연산자가 적어도 하나의 값을 8만큼 증가 시켜서는 안됩니다.c의 포인터 증가

+0

아니요, 'b'와 'c'는 독립적입니다. – StoryTeller

+1

당신은 왜 그것이 8에 의하여 증가 할 것이라고 생각합니까? – templatetypedef

+6

그런 포인터를 출력하는 것은 그리 좋지 않습니다. –

답변

4

아니오 포인터의 값을 에서으로 지정하는 값과 혼동하지 마십시오.

표현식 *b++은 다음을 의미합니다. b가 을 가리키고있는 값을 검색하고을 가리킨 다음 b 값을 증가시킵니다.

0

%d이 아닌 포인터 값을 포맷하려면 %p을 사용해야합니다.

포인터를 통해 a 값을 설정하면됩니다. bc은 증가하지 않고 참조 해제되지 않을 수 있습니다 (배열이 아닌 단일 값을 가리킴). 당신은 실제 값을 증가하려는 경우, 당신은 괄호를 사용해야

참고 : 값을 증가 b 반 참조하고

(*b)++; 

. 괄호없이 수행하면 포인터가 증가하고 원래 값이 역 참조됩니다.

-1

이 점을 명심하시기 바랍니다

* B ++이이 두 사람과 함께 당신에게 나타날 수 있습니다로 b는 어떤 정수를 가리키고, 그 정수 값이없는 2 1 incrmented되고 있음을 의미 + signs.And 당신이 경우 포인터를 출력하고 싶다면, int 대신에 % p 형식 ​​지정자를 사용해야합니다.

+0

아니요,'* b ++ ','b'가 증가합니다. –