2013-01-10 112 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。但是不應該由兩個++運算符增加至少一個值8c中遞增指針

+0

不,「b」和「c」是獨立的。 – StoryTeller

+1

爲什麼你認爲它會增加八個? – templatetypedef

+6

打印這樣的指針不是一個好主意。 –

回答

4

不要混淆指針的值與它指向的值

表達式*b++表示:檢索b指向的值,然後遞增b的值。

0

您應該使用%p來格式化指針值,而不是%d

您在此處所做的只是通過指針將a的值設置爲自身。請注意,bc在增加後可能不會被解除引用(因爲它們指向單個值而不是數組)。

需要注意的是,如果你想增加的實際值,必須使用括號:

(*b)++; 

這將間接引用b並增加價值。如果你沒有括號,那麼它會增加指針,然後解除引用原始值。

-1

請記住這一點

* B ++這意味着,b爲指向某個整數和整數值是由1 incrmented不是2,因爲它可能會出現在你面前有兩個+ signs.And如果您想要打印指針,你應該使用%p格式說明符而不是使用int。

+0

不,在'* b ++ ','b'遞增。 –