我正在学习计算机科学,并在业余时间尝试 C 编程语言。另外,我使用这本书是为了更好地理解:计算机系统:程序员的视角。它还提供了一些 C 语言示例代码。
所以,我编写了一个带有一些指针的代码 - 像这样:int *x
。我仍然在与指针和引用作斗争 - 尽管我认为我理解它。
所以我写了一个小脚本并尝试了指针和引用。 代码:
#include <stdio.h>
int main() {
int *x;
printf("Pointer: %p\n", x);
printf("Value int: %d\n", *x);
printf("Pointer ref: %p\n", &x);
}
bash/终端中的输出:
Pointer: 0x7ffe99ea7420
Value int: 1
Pointer ref: 0x7ffe99ea7330
(设置:Ubuntu 16.04 x86_64)
现在我有点困惑,未初始化的变量x
的值为1 - 并且指针和引用指向内存地址。
在大学的第一个学期,我学习了 Java,也了解了 JVM 和 Stack 的工作原理。
所以我假设在C中也是一样的。编译器为代码中的每个对象分配了一些内存。但为什么x
的值是1。
也许会有人好心地向我解释一下。 我也非常感谢任何进一步阅读或知识交流的链接。
最佳答案
未初始化的变量具有未指定的值。在分配它们之前读取它们是未定义的行为。因此,x
和 *x
表达式是未定义行为。
非常粗略地说,未定义的行为意味着任何事情都可能发生并且您的代码被破坏。任何 C 初学者书籍都会介绍这一点。
关于C - 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52182561/