C - 指针和引用

标签 c pointers

我正在学习计算机科学,并在业余时间尝试 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/

相关文章:

无法在数组中拆分和存储十六进制字符串

c - 了解结构体和 malloc 中的指针

C++ - 比较字符串函数不起作用?

c - 在 C 中从函数返回数组到 main?

c++ - 在 C++ 中填充并返回读取的数据

c - 函数的参数是指向声明为 const 的参数的指针,如何处理?

清除串口缓冲区

c - 使用循环加载多个图像时出现段错误

c - 我从这个 K&R 样本中遗漏了什么?

c - 指针和地址引用之间的区别