#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
#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
不,不要将指针的值与其指向的值混淆。
表达式的*b++
意思是:检索b指向的值,然后增加b的值。
您应该使用%p
来格式化指针值,而不是%d
.
您在这里所做的只是a
通过指针将值设置为自身。请注意,两者b
和c
在递增后可能不会被取消引用(因为它们指向单个值,而不是数组)。
请注意,如果要增加实际值,则必须使用括号:
(*b)++;
这将取消引用b
并增加值。如果你在没有括号的情况下这样做,那么它将增加指针,然后取消引用原始值。
请记住这一点
*b++ 这意味着 b 指向某个整数,并且整数值递增 1 而不是 2,因为它可能在您看来带有两个 + 符号。如果您想打印指针,您应该使用 %p 格式说明符那而不是使用int。