为什么在C中ptr =(int*)12和*ptr = 42编程错误?

har*_*503 0 c

有一个C代码,我想知道哪里是一个坏的部分.

int main() {
    // PART A
    int a = 12;
    printf("%p\n", &a);
    int *ptr = &a;
    *ptr = 15;
    printf("%i\n", a);
    // PART B: something bad starts
    ptr = (int*)12;
    *ptr = 42;
    printf("%i\n", *ptr);
}
Run Code Online (Sandbox Code Playgroud)

在PART(B)中,为什么p中的ptr =(int*)12和*ptr = 42编程错误?

use*_*394 5

问题是:

ptr = (int*)12; // This will assign memory address 0x0000000C (12) to ptr
Run Code Online (Sandbox Code Playgroud)

您正在尝试将内存地址分配给指针,而不知道它是否存在.该程序可能会崩溃.

另外: printf("%f\n", &a);←它应该是"%p"

  • 更严格的是'printf("%p \n",(void*)&a);` (2认同)
  • @James,可能会,也许不会......现在@ [haccks](http://stackoverflow.com/a/29593290/1983495)解释了它. (2认同)