最近码代码时遇到了一个想当然的错误,记录一下防止忘记。
#include <stdio.h>
int main()
{
int a = 0;
int* b = &a;
*b++;
printf("%d", *b);
return 0;
}
猜一下结果是什么。答案是1814747096(其实就是a的地址加1后对应地址内存储的值,因为用的是网页小程序,所以生成是随机的)。
再看下下面这样写:
#include <stdio.h>
int main()
{
int a = 0;
int* b = &a;
(*b)++;
printf("%d", *b);
return 0;
}
猜下结果是什么,是1。
所以,通过上面两个程序的对比,你应该也发现了,第一个由于*b没有加括号,导致的是地址加1。其实也就是 * 的优先级要比++低。为了避免这种问题,凡是不确定优先级的,那就加括号吧,这样程序保准按你的想法来运行。