码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【PL理论】(24) C- 语言:有块的作用域 | 更新的语法 | 新的语义域 | 环境 vs. 内存


    • 💭 写在前面:我们将再次扩展之前的C语言,让我们向这种语言引入“作用域”的概念。

    目录

    0x00 C- 语言:有块的作用域

    0x01 C- 语言:更新的语法

    0x02 新的语义域

    0x03 环境 vs. 内存


    0x00 C- 语言:有块的作用域

    现在,你必须在使用变量之前先声明它!

    同样,你可以拥有一个变量,它是在 if 或 while 语句的块 { } 中局部的。

    下面是一个用新的 C- 写的示例程序,请注意,我们有像 var x = 5 这样的声明

    1. var x = 5;
    2. var i = 1;
    3. var s = 0;
    4. while (i < 10) {
    5. var x = i + i; // 这个 x 只在循环内部绑定
    6. s = s + x;
    7. i = i + 1
    8. };
    9. x = x + s // 'x' 将会变成 5 + 90 = 95

    0x01 C- 语言:更新的语法

    为简化起见,这次我不会介绍指针的概念给 C-

    相反,我们有了变量声明的语句,必须同时声明和初始化。

    0x02 新的语义域

    值的域与之前相同:

    v∈Val=Z+B" role="presentation">v∈Val=Z+Bv∈Val=Z+B

    现在程序状态包括环境和内存,语句的执行将改变这个状态:

    ρ∈Env=Var→Loc" role="presentation">ρ∈Env=Var→Locρ∈Env=Var→Loc
    M∈Mem=Loc→Val" role="presentation">M∈Mem=Loc→ValM∈Mem=Loc→Val

    𝑳𝒐𝒄 是一组有效的内存位置 (地址),即 Loc={l1,l2,...,lN}" role="presentation">Loc={l1,l2,...,lN}Loc={l1,l2,...,lN},其中 N" role="presentation">NN 是最大内存大小。

    下面,我们来更仔细地看一下环境和内存。

    0x03 环境 vs. 内存

    在函数式语言中,环境通常直接将一个名称映射到一个值。

    在具有内存的命令式语言中,环境通常将一个名称映射到内存位置 (地址) 。

    然后,内存将每个位置映射到一个值,在下面的图中,l1,l2,l2" role="presentation">l1,l2,l2l1,l2,l2 表示内存位置。

    在先前的示例中,当 inner x" role="presentation">xx 被声明时,这些状态应该如何改变?

    1. var x = 5;
    2. var i = 1;
    3. var s = 0;
    4. while (i < 10) {
    5. var x = i + i;
    6. ...
    7. }

    在先前的示例中,当内部 x" role="presentation">xx 被声明时,这些状态应该如何改变?

    • 名称 x 必须更改为指向新的位置 l4" role="presentation">l4l4
    • 并且必须创建一个新的内存插槽
    • 请注意,l1" role="presentation">l1l1 的内存插槽仍然存在内存中


    1. 📌 [ 笔者 ]   王亦优
    2. 📃 [ 更新 ]   2024.6.10
    3. ❌ [ 勘误 ]   /* 暂无 */
    4. 📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
    5. 本人也很想知道这些错误,恳望读者批评指正!

    📜 参考资料 

    Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

  • 相关阅读:
    java单元测试
    pod中将代码与运行环境分离
    【代码随想录算法训练营第六十四天|卡码网47.参加科学大会、94.城市间货物运输I】
    检查OpenGL的版本
    【RHCE】ansible的简单配置
    丐版设备互联方案:安卓linux互联局域网投屏,文件共享,共享剪切板
    第二十四篇 ref 访问子组件
    【通义千问】大模型Qwen GitHub开源工程学习笔记(4)-- 模型的量化与离线部署
    NC1 大数加法
    Pytorch学习笔记(三)模型的使用、修改、训练(CPU/GPU)及验证
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/139611971
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号