有一个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编程错误?
问题是:
ptr = (int*)12; // This will assign memory address 0x0000000C (12) to ptr
Run Code Online (Sandbox Code Playgroud)
您正在尝试将内存地址分配给指针,而不知道它是否存在.该程序可能会崩溃.
另外:
printf("%f\n", &a);←它应该是"%p"