#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吗
发布于 2013-01-11 04:38:42
不是的。不要混淆指针的值和它所指向的值。
表达式*b++的意思是:检索b指向的值,然后递增b的值。
发布于 2013-01-11 04:45:01
应该使用%p而不是%d来设置指针值的格式。
这里要做的就是通过指针将a的值设置为自身。注意,b和c在递增后可能都不会被取消引用(因为它们指向单个值,而不是数组)。
请注意,如果要递增实际值,则必须使用括号:
(*b)++;这将取消对b的引用并递增该值。如果不使用圆括号,那么它将递增指针,然后取消对原始值的引用。
发布于 2013-01-11 04:52:26
请记住这一点
这意味着b指向某个整数,整数值增加了1,而不是2,如果你想打印指针,你应该使用%p格式说明符,而不是使用signs.And。
https://stackoverflow.com/questions/14266738
复制相似问题