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

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(使用前将#替换为@)

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

随机推荐

  • 我可以为 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