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

4

3 回答 3

4

不,不要将指针的值与其指向的值混淆

表达式的*b++意思是:检索b指向的值,然后增加b的值。

于 2013-01-10T20:38:41.983 回答
0

您应该使用%p来格式化指针值,而不是%d.

您在这里所做的只是a通过指针将值设置为自身。请注意,两者bc在递增后可能不会被取消引用(因为它们指向单个值,而不是数组)。

请注意,如果要增加实际值,则必须使用括号:

(*b)++;

这将取消引用b并增加值。如果你在没有括号的情况下这样做,那么它将增加指针,然后取消引用原始值。

于 2013-01-10T20:45:00.540 回答
-1

请记住这一点

*b++ 这意味着 b 指向某个整数,并且整数值递增 1 而不是 2,因为它可能在您看来带有两个 + 符号。如果您想打印指针,您应该使用 %p 格式说明符那而不是使用int。

于 2013-01-10T20:52:26.333 回答