声明与全局、局部和静态同名的变量

2023-12-11

我有以下代码片段,我必须分析输出是什么:

#include <stdio.h>

  void f(int d);

  int a = 1, b = 2, c = 3, d = 4;

  int main(){
    int a = 5, c = 6;
    f(a);
    f(b);
    f(c);
    printf("%d %d %d %d\n",a,b,c,d);
    return 0;
  }

  void f(int d){
    static int a = 0;
    a = a + 7;
    b = a + d;
    c++;
    d--;
    printf("%d %d %d %d\n",a,b,c,d);
  }

我得到的输出如下:

7 12 4 4  
15 26 5 11  
21 27 6 5  
5 27 6 4  

这确实让我很困惑。我注意到在所有 3 个函数调用中全局声明的a接受任务并且在printf() from main()身体的a声明于main()被打印。但是,我不确定其余变量的行为。这是未定义的行为还是实际上有意义?


int a = 1, b = 2, c = 3, d = 4;---> 全局变量

int main(){
    int a = 5, c = 6;         ---> Shadows the global `a` and `c`

....

void f(int d){
    static int a = 0;         ---> local static variable visible only inside `f`

...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明与全局、局部和静态同名的变量 的相关文章

  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp

随机推荐

  • 我可以为 iCloud 的“文档目录”添加不备份吗

    我读过 我可以使用 ios 5 1 及更高版本将文件夹标记为 不备份 属性 据我了解 在这种情况下 目录的所有内容都将从备份中排除 在我的应用程序中 我们需要从备份中排除文档目录中的所有文件 可以在应用程序执行期间从文档中添加或删除文件 我
  • 在kivy中的两个屏幕类之间传递变量

    我有两个屏幕类ScreenOne and ScreenTwo我想在它们之间传递一个值 我正在使用 ScreenManager 并且正在使用 ScreenTwo 切换到 self manager current screen2 我想在不使用
  • com.firebase.client.ServerValue.TIMESTAMP 响应什么?

    我正在尝试在网络上使用 Firebase 构建聊天应用程序 并创建 Android 客户端 在我的网络应用程序中 我将 Firebase 服务器的时间戳与消息一起发送 但我在 Android 上似乎遇到了一些麻烦 使用 Firebase 的
  • ParseExact 将字符串解析为 DateTime 失败

    Nov 8 1 44 当我使用这段代码时 它失败了 string DD Nov 8 1 44 try DateTime ParseExact DD MMM dd HH mm CultureInfo InvariantCulture catc
  • gnuplot:将列标题设置为标签

    是否有机会将数据文件列的标题设置为标签 而不是键 我的数据文件有 5 或 6 列 每列上方有一个标题 现在我想将列标题与set label命令 这可能吗 On a 类unix系统 the head命令帮助 header system hea
  • 将 byte[] 转换为字符串

    我有一个长度为 17 个字节的 byte 类型的字节数组 我想将其转换为字符串 并希望将此字符串用于另一次比较 但我得到的输出不是要验证的格式 我正在使用下面的方法进行转换 我想输出为易于验证的字符串 并给出相同的字符串进行比较 byte
  • Python zip() 两个列表

    我试图压缩两个具有相同长度的列表 但总是收到错误 zip 对象位于 0x0000000002A81548 而不是压缩列表 filename input Which file do you want to open n file open C
  • 使用Java使用以公里为单位的纬度经度坐标计算距离

    我有以下方法可以计算距离并以英里为单位返回 public static int calcDistance float latA float longA float latB float longB double theDistance Ma
  • 为什么虚基多重继承中只调用基类默认构造函数? [复制]

    这个问题在这里已经有答案了 在多重继承中 我有一个虚拟的Base被类继承的类A和班级B A and B是基类AB 请参阅下面的代码 在构造函数中A and B Base string 构造函数被调用 我期望得到以下输出 Base Base
  • qDebug() 不打印任何内容

    我尝试将 Qt 与 CLion 一起使用 我的问题是 qDebug 不打印任何内容 但 qInfo qWarning qCritical 和 qFatal 运行良好 这是我的示例代码 include
  • 以编程方式更改单选按钮的背景

    我有一个RadioGroup有两个单选按钮 我想在禁用它们时以编程方式更改它们的颜色
  • C# 套接字和多线程

    我正在尝试了解有关 C 中的套接字和线程的更多信息 我在网上找到了很多很好的资源来帮助我入门 到目前为止我制作的程序是一个简单的 中间人 应用程序 它的设计如下 客户端 应用程序 服务器 给定以下代码 如何防止该线程以 100 CPU 运行
  • android 每个星期一或每个星期二重复闹钟

    我正在开发一个基于警报的应用程序 其中我必须根据用户输入在每个工作日重复警报 每个星期一 星期二 星期三 我用了这个片段 Intent intent new Intent context AlarmReceiver class Pendin
  • Prolog 中的错误未定义过程

    我写了一条规则 parent georgie jessy child jessy georgio 但是 当我想证明 parent georgie jessy 我收到错误 parent 2 Undefined procedure child
  • 将纯色背景颜色动画化为图像

    我有一组 div 我希望它们每个都有不同的背景颜色 而悬停时过渡到背景图像所选网址的 到目前为止 我已经成功找到了平滑颜色 gt 图像转换的代码 但这需要 HTML 中的实际 img 代码 并且我需要这些 div 因为我将在其中放入文本 有
  • 从 C# Windows 应用程序读取/写入三星 Android 手机/平板电脑

    我正在编写一个 Windows C winforms 应用程序 它将图像从 PC 复制到 Android 设备的图像文件夹 Windows 文件资源管理器给了我这个路径 Computer SCH I535 Phone Images 但我无法
  • Android Studio 无法解析fragmentActivity 和ViewPager 导入

    我遵循开发可滑动选项卡的教程 当我导入时 import android support v4 app FragmentActivity import android support v4 view ViewPager Android Stu
  • 示例:使用 AsyncTask 的 Android 双向网络套接字

    我发现的大多数 Android 网络套接字示例都是单向的 我需要一个双向数据流的解决方案 我最终了解到了 AsyncTask 此示例演示如何从套接字获取数据并将数据发送回套接字 由于接收数据的套接字具有阻塞性质 因此该阻塞需要在 UI 线程
  • 如何让 Jenkins 上的 groovy 屏蔽变量的输出,就像处理凭证一样?

    Jenkins 上的 groovy 是否有一种方法可以获取任意字符串变量 例如对另一个服务的 API 调用的结果 并让 Jenkins 在控制台输出中屏蔽它 就像它自动从凭证管理器读取的值一样 更新的解决方案 要隐藏变量的输出 您可以使用掩
  • 声明与全局、局部和静态同名的变量

    我有以下代码片段 我必须分析输出是什么 include