gpt4 book ai didi

c - C 中的变量类型以及谁跟踪它

转载 作者:太空狗 更新时间:2023-10-29 15:21:19 24 4
gpt4 key购买 nike

我正在上MOOC类(class)CS50来自哈佛。在第一个类中,我们学习了不同数据类型的变量:intchar 等。

我的理解是命令(比如,在 main 函数中)int a = 5 在堆栈并在其中放置一系列代表 5 的 0 和 1。

相同的 0 和 1 序列也可能表示某个字符。所以有人需要跟踪这样一个事实,即为 a 保留的内存位置中的 0 和 1 的序列将被读取为整数(而不是字符)。

问题是谁在跟踪它?计算机的内存通过在内存中的这个地方贴上一个标签说“嘿,无论你在这 4 个字节中找到什么,都读作一个整数”?或者 C 编译器,它知道(查看 aint 类型)当我的代码要求它做某事时(更准确地说,生成机器代码做某事) ) 与 a 的值需要将此值视为整数?

我非常感谢为 C 初学者量身定制的答案。

最佳答案

对于C语言,就是编译器。

在运行时,堆栈上只有 32 位 = 4 个字节。

你问“通过将标签贴到这个地方来获得计算机的内存...”:这是不可能的(对于当前的计算机体系结构 - 感谢@Ivan 的提示)。内存本身只有 8 位(0 或 1)字节。内存中没有任何地方可以用任何附加信息标记内存单元。

还有其他语言(例如 LISP,在某种程度上还有 Java 和 C#)将整数存储为数字的 32 位加上包含一些位编码标记的一些位或字节的组合,在这里我们有一个整数。所以他们需要例如6 个字节用于 32 位整数。但是对于 C,情况并非如此。您需要源代码中的知识才能正确解释内存中的位——它们不会 self 解释。并且已经有支持硬件标记的特殊架构。

关于c - C 中的变量类型以及谁跟踪它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com