【发布时间】:2013-07-13 23:59:12
【问题描述】:
我刚刚开始学习 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;
}
效果很好。
我的问题是,为什么我不能直接为指针设置文字值?我查看了在线教程以获取指针,其中大多数都按照与第二个示例相同的方式进行操作。
感谢任何帮助。
【问题讨论】:
-
因为该指针未初始化 - 它可能指向几乎任何地方并可能导致程序崩溃。
-
你很幸运,它因错误而终止。
-
@JonnyRo 是对的。在实际代码中,这种错误往往会导致为期一周的调试会话试图找出为什么其他变量每隔一段时间就会随机更改(永远不会在您实际测试它时,总是在您正在做的时候)公开演示)或安全漏洞,其中有人通过操纵不同的值将“is_admin”标志设置为 true。
-
这个问题的标题“Directly assignment values to C Pointers”有点误导。整个问题是您不为指针赋值。