- 💭 写在前面:我们将再次扩展之前的C语言,让我们向这种语言引入“作用域”的概念。
目录
0x00 C- 语言:有块的作用域
0x01 C- 语言:更新的语法
0x02 新的语义域
0x03 环境 vs. 内存
0x00 C- 语言:有块的作用域
现在,你必须在使用变量之前先声明它!
同样,你可以拥有一个变量,它是在 if 或 while 语句的块 { } 中局部的。
下面是一个用新的 C- 写的示例程序,请注意,我们有像 var x = 5 这样的声明
var x = 5;
var i = 1;
var s = 0;while (i < 10) {var x = i + i; // 这个 x 只在循环内部绑定s = s + x;i = i + 1
};
x = x + s // 'x' 将会变成 5 + 90 = 95
0x01 C- 语言:更新的语法
为简化起见,这次我不会介绍指针的概念给 C-
相反,我们有了变量声明的语句,必须同时声明和初始化。
0x02 新的语义域
值的域与之前相同:
现在程序状态包括环境和内存,语句的执行将改变这个状态:
𝑳𝒐𝒄 是一组有效的内存位置 (地址),即 ,其中 是最大内存大小。
下面,我们来更仔细地看一下环境和内存。
0x03 环境 vs. 内存
在函数式语言中,环境通常直接将一个名称映射到一个值。
在具有内存的命令式语言中,环境通常将一个名称映射到内存位置 (地址) 。
然后,内存将每个位置映射到一个值,在下面的图中, 表示内存位置。
在先前的示例中,当 inner 被声明时,这些状态应该如何改变?
var x = 5;
var i = 1;
var s = 0;
while (i < 10) {var x = i + i;...
}
在先前的示例中,当内部 被声明时,这些状态应该如何改变?
- 名称 必须更改为指向新的位置
- 并且必须创建一个新的内存插槽
- 请注意, 的内存插槽仍然存在内存中
📌 [ 笔者 ] 王亦优
📃 [ 更新 ] 2024.6.10
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!
📜 参考资料 Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . |