c - 声明的 int 上的指针操作数与声明的指针

标签 c variables pointers

我很困惑

此代码片段中发生了什么:

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/

相关文章:

C sizeof计算运行时、编译时

java - 用变量替换实例

python - 使用 pandas 导出 csv 时指定第一列

c - 二维数组获得不需要的额外元素

c++ - 删除 vector 中指针的方法 [C++]

c - 我应该在发生 fatal error 时释放分配的内存吗?

c - 我如何在 taskSpawn()、period() 和看门狗之间做出选择?

c++ - 在 C99 中需要 _Bool 吗?

java - while(i != i) { } - 是否可能有一个永远为真的赋值

c - 返回 Void 指针并将 Hex 转换为 UINT