我刚刚开始学习C,我一直在使用MinGW for Windows运行一些简单的程序来理解指针如何工作。我试过如下:直接将值分配给C指针
#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;
}
它工作正常。
我的问题是,为什么我无法直接设置文字值的指针?我已经在线查看了教程,其中大部分都和第二个例子一样。
任何帮助表示赞赏。
指针未初始化的原因 - 它可能指向几乎任何地方并可能导致程序崩溃。 – Till
你很幸运,它终止了一个错误。 – JonnyRo
@JonnyRo是对的。在真实的代码中,这种错误往往会导致为期一周的调试会话,试图找出为什么其他变量每隔一段时间就会随机更改一次(从不在实际测试它时,总是在做时公开演示)或安全漏洞,通过操纵不同的值来将“is_admin”标志设置为true。 – abarnert