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

标签 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);
}

在第 (B) 部分中,为什么 ptr = (int*)12 和 *ptr = 42 在 C 中是错误的编程?

最佳答案

问题是:

ptr = (int*)12; // This will assign memory address 0x0000000C (12) to ptr

你试图在不知道指针是否存在的情况下将内存地址分配给它。程序可能会在这里崩溃。

还有: printf("%f\n", &a); ← 应该是 "%p"

关于c - 为什么 ptr = (int*)12 和 *ptr = 42 在 C 中是错误的编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29593182/

相关文章:

c++ - Visual Studio 2010 将 .cpp 文件编译为 .c 文件

c - 将char存入char矩阵(C编程)

C 编程语言 "Character Counter"示例无法运行

python - 如何在 python 中使用 c 结构?

c - 解决共享库的 undefined symbol

c - 如果需要调用copy_to_user,如何使用自旋锁?

除非包含 printf(),否则 C 循环会抛出错误?

c - 向stderr写入数据使程序成为守护进程后退出

c - 需要在 C 中将 2 的补码转换为十进制的最快方法

c++ - 如果 x 和 y 分别是值为 1 和 2 的两个整数。语句 y= - -x-- 是什么意思?