我很困惑
此代码片段中发生了什么:
int *a;
a = 1;
*a = 1;
与此相比:
int b;
b = 2;
*b = 2;
最佳答案
int *a;
a = 1;
*a = 1;
a
是一个指针,因此赋值 a = 1
无效。 (用 C 标准术语来说,这是“约束违规”,需要进行诊断。)您的编译器必须至少打印一条针对此赋值的警告;它应该完全拒绝它。 (某些编译器可能会插入隐式转换,就像您编写了 a = (int*)1
一样;您不应该依赖于此。)
int b;
b = 2;
*b = 2;
b
不是指针,因此 *b
无效。同样,您的编译器必须诊断错误,并且应该拒绝您的程序。
在这两种情况下,代码在 C 中都没有定义的含义。
关于c - 声明的 int 上的指针操作数与声明的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312528/