如何从外部函数更改局部静态变量值

2024-02-21

#include <stdio.h>

void func() {
   static int x = 0;  // x is initialized only once across three calls of
                      //     func()
   printf("%d\n", x); // outputs the value of x
   x = x + 1;
}

int main(int argc, char * const argv[]) {
   func(); // prints 0
   func(); // prints 1
   func(); // prints 2

   // Here I want to reinitialize x value to 0, how to do that ? <-- this line
   return 0;
}

在上面的代码中,调用 func() 3次后我想重新初始化x为零。有什么方法可以重新初始化为0吗?


你想要这个功能吗always三次调用后重置计数器?或者您希望调用者在任意时间重置计数?

如果是前者,你可以这样做:

void func() {
  static int x = 0;
  printf("%d\n", x);
  x = (x + 1) % 3;
}

如果是后者,使用局部静态变量可能是一个糟糕的选择;您可以使用以下设计:

class Func
{
  int x;
  // disable copying

public:
  Func() : x(0) {}

  void operator() {
    printf("%d\n", x);
    x = x + 1;
  }

  void reset() {
    x = 0;
  }
};

Func func;

您应该将其设置为不可复制,以避免两个对象增加两个不同的计数器(或使其成为单例),或者将计数器设置为静态成员,以便每个对象增加相同的计数器。现在你像这样使用它:

int main(int argc, char * const argv[]) {
  func(); // prints 0
  func(); // prints 1
  func(); // prints 2

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

如何从外部函数更改局部静态变量值 的相关文章

  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 将成员函数作为参数传递/c++

    我想用 C 实现一个类b可以通过封装该迭代器类型的成员集进行某种迭代 喜欢 b object for each x do function f so 函数 f会得到每个人的x成员并做任何事情 比方说 void function f x me
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows

随机推荐

  • javax.el.PropertyNotFoundException:目标无法访问,标识符“登录”解析为 null Spring + JSF [重复]

    这个问题在这里已经有答案了 我无法解决使用 Autowired 服务获取 null 的问题 这是我的代码 我的配置文件 应用程序上下文 xml
  • 如何将 Java 组合框中的项目居中

    Java 中的组合框是否有一种方法可以将组合框中的项目居中 我尝试了这个但没有成功 myCombobox setAlignmentY CENTER ALIGNMENT Thanks 试试这个链接 如何使用组合框 Java 教程 gt 使用
  • 使用 PHP Mail() 发送附件?

    我需要通过邮件发送 pdf 文件 可以吗 to xxx subject Subject message Example message with b html b headers MIME Version 1 0 r n headers C
  • T get()”是什么意思? (还有用吗?)

    这似乎是有效的 Java 语法
  • 如何使用存储过程在 mysql 中选择和插入值

    我是使用存储过程的新手 我有一个从表中获取值的查询 之后 我需要将结果插入到另一个表中 这是我的查询 SELECT a gender b purpose abroad as per recorded travel b country nam
  • Minecraft 克隆的最佳盒子选择方法

    我正在制作 Minecraft 克隆作为我的第一个 OpenGL 项目 但卡在了框选择部分 做出可靠的盒子选择的最佳方法是什么 我一直在研究一些 AABB 算法 但它们都没有足够好地解释它们到底做了什么 尤其是经过超级调整的算法 而且我不想
  • 跳出 _.each 循环

    是否可以在每个循环中跳出下划线 each obj function v i if i gt 2 break lt does not work some code here 我可以使用另一种设计模式吗 我认为你不能 所以你只需将函数的内容包装
  • Facebook 画布应用程序“redirect_uri”在授权和身份验证后突破 iframe

    我正在升级我现有的 FB 应用程序 并且非常疯狂地尝试获得一个简单的 PHP iframe 画布应用程序来授权和身份验证 以及使用 SSL 从来没有看过这么多例子 这就是我陷入困境的地方 用户授权应用程序并且应用程序对用户进行身份验证后 我
  • 如何从浏览器将用户重定向到 Google Play 上应用页面的评论选项卡?

    我在 Google Play 上发布了一个应用程序 我想要一个将用户重定向到 google play 上应用程序页面上的评论选项卡的网址 在发布应用程序的文档中 有一个用于将用户重定向到应用程序的详细信息选项卡 默认 的 url 我希望当用
  • 如何在数组中查找大于、小于或等于某个值的数字?

    我试图输出小于 5 的值和大于数组中所有值的平均值的值 我不知道如何使这一切顺利进行并输出正确的数字 有人可以帮忙吗 这就是我所拥有的 我快到了 我只是不知道我做错了什么 int numbers 2 4 6 8 10 12 14 16 in
  • PrimeFaces p:focus on p:dataTable 元素

    我目前正在尝试设置一个可编辑的数据表 当用户使用 JavaScript 或支持 bean 编辑单元格时 该表使用 ajax 来保持焦点 因为当发生单元格编辑时 表的其他部分中的数据将需要更新 因此应重新绘制表格 使焦点元素失去焦点 目前我正
  • Matlab fft 函数交换索引

    我编写了一个简单且非常小的 Matlab 代码 用于计算给定数组 或向量 的离散傅里叶变换 我手动计算出来并得到了答案 我的 Matlab 代码也给出了相同的答案 但fft通过交换索引给出了与此不同的答案 以下是我所做的手动计算 这是第二张
  • 如何更改 Windows 控制台应用程序中的文本或背景颜色

    哪个 C 函数更改文本或背景颜色 MS Visual studio 例如cout lt lt This text 如何将 此文本 设为红色 您可以使用 Win32 更改控制台应用程序的颜色 以下是有关如何操作的示例 include stda
  • 关于 WSO2 API Manager 数据源

    我现在正在执行 WSO2 API 管理器 Analytics 2 0 POC 当我将数据源从 H2 更改为 Oracle 时 在 wso2am 2 0 1 SNAPSHOT 中 有 2 个数据源配置文件 master datasources
  • EF EntityCollection 中的更改通知

    在 Silverlight 4 项目中 我使用 WCF RIA 服务 MVVM 原则和 EF 4 我遇到了这种情况 创建了一个名为 Category 的实体和另一个名为 CategoryLocale 的实体 使用 VS 自动执行 没有 PO
  • 修复 Tomcat 8 上的错误代码:ssl_error_no_cypher_overlap

    我有一个便宜的 SSL 证书 我想用 Tomcat 8 0 26 配置它 我在 Linux 上运行以下命令来创建密钥库 root cert keytool import alias root keystore tomcat jks trus
  • 为哈希选择合适的表大小

    如果我有一个 1000 个键集 我的哈希表的合适大小是多少 如何确定 它取决于负载系数 表将增加其大小并重新分布其元素的 满百分比 点 如果您知道正好有 1000 个条目 并且该数字永远不会改变 则只需将负载因子设置为 1 0 将初始大小设
  • 使用 VBA 删除 Excel 中的工作表和数据透视表

    我正在尝试在 VBA 中集成功率枢轴和枢轴图表的创建 并已经完成了很大一部分 然而 我遇到了一个我似乎无法克服的问题 我创建新的工作表 在其中创建数据透视并将其导出为 PDF 完成后 我删除数据透视表和工作表 Sub DeleteAllPi
  • 在 Python 中测试所有组合

    我有两组选择 optionList1 a1 a2 a3 an optionList2 b1 b2 b3 bn 选项列表中的元素数量不一定相等 我必须从第一个选项列表中选择两次 如何确保我已尝试了第一个列表中的 2 个选项和第二个列表中的一个
  • 如何从外部函数更改局部静态变量值

    include