c - 直接给 C 指针赋值

标签 c pointers

我刚刚开始学习 C,并且一直在使用 MinGW for Windows 运行一些简单的程序以了解指针的工作原理。我尝试了以下方法:

#include <stdio.h>

int main(){
    int *ptr;
    *ptr = 20;
    printf("%d", *ptr);
    return 0;
}

编译正确但当我运行可执行文件时它不起作用 - 该值未打印到命令行,而是我收到一条错误消息,指出 .exe 文件已停止工作。

然而,当我尝试将值存储在一个 int 变量中并将 *ptr 分配给该变量的内存地址时,如下所示:

#include <stdio.h>

int main(){
    int *ptr;
    int q = 50;
    ptr = &q;
    printf("%d", *ptr);
    return 0;
}

它工作正常。

我的问题是,为什么我不能直接给指针设置一个文字值?我查看了在线教程以获取指导,其中大部分教程的操作方式与第二个示例相同。

感谢任何帮助。

最佳答案

问题是您没有初始化指针。您已经创建了一个指向“任何您想要的地方”的指针——它可以是某个其他变量的地址,或者您代码的中间位置,或者一些根本没有映射的内存。

您需要在内存中的某处创建一个int 变量,以便int * 变量指向。

您的第二个示例执行此操作,但它执行与此处无关的其他操作。这是您需要做的最简单的事情:

int main(){
    int variable;
    int *ptr = &variable;
    *ptr = 20;
    printf("%d", *ptr);
    return 0;
}

此处,int 变量未初始化 — 但没关系,因为您只需将其中的任何值替换为 20。关键是指针 被初始化为指向变量。事实上,如果你愿意,你可以只分配一些原始内存来指向:

int main(){
    void *memory = malloc(sizeof(int));
    int *ptr = (int *)memory;
    *ptr = 20;
    printf("%d", *ptr);
    free(memory);
    return 0;
}

关于c - 直接给 C 指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665793/

相关文章:

c - 易于使用 system() 的 fork-exec

c - 如何使用 open() 而不是 fopen() 判断文本文件是否为空

c - libclang : error: clang-c/Index. h: 没有那个文件或目录

c++ - 通过 'Pointer 1'获取 'Pointer 3'的值

带有指针的 C++ 类模板特化

c - 传递字符串数组 C

c - 理解指针算术

使用 void* 的 C 队列实现 - 好的还是坏的做法?

C程序未显示预期结果

pointers - 结构指针方法中的指针可以重新分配给另一个实例吗?