int *p=10 和 int *p = (int *)10 有什么区别?

man*_*ndy 3 c pointers

指向地址位置 10 的这两个语句的含义是否相同p?\n编译时,第一个初始化会给出一些警告。那是什么意思?

\n
#include <stdio.h>\nint main()\n{\n    int *p = 10;\n    int *q = (int *)10;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
warning: initialization of \xe2\x80\x98int *\xe2\x80\x99 from \xe2\x80\x98int\xe2\x80\x99 makes pointer from integer without a cast [- Wint-conversion]\n
Run Code Online (Sandbox Code Playgroud)\n

dbu*_*ush 8

这两种情况都会将整数 10 转换为用于初始化int *. 第二种情况的强制转换明确表明这种行为是故意的。

虽然允许从整数转换为指针,但赋值运算符(以及扩展的初始化)并不明确允许这种转换,因此强制转换需要符合要求。然而,许多编译器仍然允许这样做并简单地发出警告(正如您显然所做的那样)。

但请注意,实际尝试使用分配了特定数值的指针很可能会导致崩溃,除非您使用的是支持读取或写入特定内存地址的嵌入式系统。