指向地址位置 10 的这两个语句的含义是否相同p?\n编译时,第一个初始化会给出一些警告。那是什么意思?
#include <stdio.h>\nint main()\n{\n int *p = 10;\n int *q = (int *)10;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nwarning: initialization of \xe2\x80\x98int *\xe2\x80\x99 from \xe2\x80\x98int\xe2\x80\x99 makes pointer from integer without a cast [- Wint-conversion]\nRun Code Online (Sandbox Code Playgroud)\n
这两种情况都会将整数 10 转换为用于初始化int *. 第二种情况的强制转换明确表明这种行为是故意的。
虽然允许从整数转换为指针,但赋值运算符(以及扩展的初始化)并不明确允许这种转换,因此强制转换需要符合要求。然而,许多编译器仍然允许这样做并简单地发出警告(正如您显然所做的那样)。
但请注意,实际尝试使用分配了特定数值的指针很可能会导致崩溃,除非您使用的是支持读取或写入特定内存地址的嵌入式系统。