我刚刚开始学习 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/