如何更改作为参数传递给函数的变量?

2023-12-21

我试图通过使用返回 void 的函数来更改结构内的一些变量。该函数采用 Struct 成员作为参数、结构数组和大小。该函数有一些代码,最终会更改结构成员内的一些变量。但是,我知道当您将某些内容作为参数传递给函数时,您正在使用副本而不是原始文件。因此,对结构成员所做的更改将不会被“保存”。

我对这个主题做了一些研究,发现指针是解决这个问题的一种方法。但问题是,我不知道如何使用指针,而且我发现的解释有点令人困惑。

指针是做到这一点的唯一方法吗?如果是这样,有人可以解释/告诉我如何在这种特定情况下使用指针吗?


我如何使用返回 void [...] 的函数更改作为参数传递给函数的变量 [...]

指针是做到这一点的唯一方法吗?

Yes.

如何执行此操作的示例:

#include <stdio.h> /* for printf() */

struct S
{
  int i;
  char c;
};

void foo(struct S * ps)
{
  ps->i = 42;
  ps->c = 'x';
}

int main(void)
{
  struct S s = {1, 'a'}; /* In fact the same as: 
  struct S s;
  s.i = 1;
  s.c = 'a'
  */

  printf(s.i = %d, s.d = %c\n", s.i, s.c);

  foo(&s);

  printf(s.i = %d, s.d = %c\n", s.i, s.c);
}

Prints:

s.i = 1, s.d = a
s.i = 42, s.d = x    

另一个例子是(取自/基于Bruno https://stackoverflow.com/users/2458991/bruno's 删除的答案 https://stackoverflow.com/revisions/55990582/2):

void f(int * v1, float * v2)
{
  *v1 = 123; // output variable, the previous value is not used
  *v2 += 1.2; // input-output variable
}

int main(void)
{
  int i = 1;
  float f = 1.;

  f(&i, &f);
  // now i values 123 and f 2.2

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

如何更改作为参数传递给函数的变量? 的相关文章

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • Rails find:使用条件,同时通过不同的命名关联两次包含同一个表

    我有用户发送给其他用户的帖子 有两种模型 post 和 user 并且 post 具有以下命名关联 belongs to from user class name gt User foreign key gt from user id be
  • 游戏之间的冲突!框架 2.5 和 gRPC 0.13

    Play 2 5 0使用Netty 4 0 33 而gRPC需要Netty 4 1 0 用于http2支持 这会导致以下异常 error p c s n PlayRequestHandler Exception caught in Nett
  • 将正则表达式绑定到 PDO 语句中的 PDO 参数

    好的 我对 php 和 mysql 相当陌生 我正在创建一个 mysql 数据库的 php 前端 我使用 PDO 驱动程序访问数据库 因为它可以防止 SQL 注入攻击 到目前为止 一切都很好 直到我遇到这个问题 我有一个搜索功能 用户可以输
  • MySQL 错误 1443 解决方法

    我相信我的问题可以参考另一个问题 https stackoverflow com questions 1225496 mysql 1443 what does it mean标题几乎相同 但不幸的是答案对我来说不够清楚 而且这个问题也有 6
  • 使用css重置时如何在段落之间添加空格? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用 css 重置时 在段落之间添加空格的最安全 无高度变化的跨浏览器方法是什么 div p class text paragraph1 p p
  • Java GC(分配失败)

    为什么总是 GC 分配失败 适用于 linux amd64 JRE 的 Java HotSpot TM 64 位服务器 VM 25 25 b02 1 8 0 25 b17 CommandLine flags XX CMSInitiating
  • 作业完成后 Jenkins 杀死 JBoss 服务器

    我使用 Ant 通过 Jenkins 启动 关闭 JBoss 5 服务器 Ant java spawn 和 fork 设置为 true 因此命令在后台执行 Jenkins 成功启动服务器 等待两分钟 Jenkins 中的 睡眠 命令 然后在
  • 使用比较 Xcode iOS 9 中“其他进程”内存不足

    我的应用程序在内存为 0 5GB 的设备上崩溃 然而 在 Xcode 中分析内存使用情况 它很少超过 140MB 我用仪器检查过泄漏情况 但没有发现明显的泄漏 但是 当我运行我的应用程序时 其他进程 使用的内存总是非常高 这是启动后的静止状
  • 如何在 Xamarin Forms 中创建阴影

    如何使用 Xamarin Forms 在按钮或标签上创建阴影 我目前正在使用 Xamarin Forms 1 3 并尝试在 XAML 中执行此操作 如果可能 有没有人有一个可行的例子可以给我指点 我还没有尝试过这个 但您可以创建同一控件的
  • awk 搜索另一个文件中的字段

    我需要在第二个文件中搜索一个文件中的字段 想知道 awk 是否是正确的解决方案 file 1 one two file 2 something one balh one blah two blah two 所需输出 one somethin
  • 为什么在检查最近的提交后我有一个分离的 HEAD?

    最近 在使用 git 存储库时 我想查看旧提交中的代码 68cce45 所以我做了 git checkout 68cce45 查看更改后 我想返回到存储库的当前版本并继续工作 自从2bcfd11是最近的提交 我做了 git checkout
  • 如何将自动布局与容器转换结合使用?

    如何将自动布局与 UIViewController 容器转换方法一起使用 void transitionFromViewController UIViewController fromViewController toViewControl
  • 将一个数据系列绘制在另一个数据系列下方

    当您在 Matlab 中绘制图形时 最近绘制的数据系列会放置在已有数据之上 例如 figure hold on plot sin linspace 0 pi linewidth 4 color 0 0 1 plot cos linspace
  • Android Firebase 应用程序分发 - 服务凭证文件不存在。请检查服务凭证路径并重试

    我正在尝试从 Crashlytics Beta 迁移到 Firebase App Distribution 中间的 CircleCi CircleCi 中的构建失败并出现以下错误 什么地方出了错 任务 FiverrApp appDistri
  • Odoo 销售点 + 邮箱:如何修改收据

    我需要修改销售点收据 在 Odoo 销售点中 有两个打印收据的模板 XmlReceipt 和 PostTicket 当我使用 Posbox 时 我想我必须修改 XmlReceipt 请问有没有办法继承原来的模板 我找到了有关如何使用 Pos
  • 没有错误:无法在谷歌云存储上查看上传的文件

    使用云函数在云函数上运行 python 代码云函数 python https github com MartinSahlen cloud functions python 我正在云上处理图像 现在我想将该图像保存在google cloud
  • 使用 TStringList 的奇怪 EOutOfMemory 异常

    我有一个系统 它加载一些压缩到 log 文件中的文本文件 然后使用多个线程解析为信息类 每个线程处理不同的文件并将解析的对象添加到列表中 该文件是使用 TStringList 加载的 因为它是我测试过的最快的方法 文本文件的数量是可变的 但
  • 在 Python 中迭代模块

    所以我有一个嵌套文件夹 其中有执行某些操作的模块 注意 它们不是类 只是脚本 我想迭代这些模块 我现在拥有的 from scripts module 1 import train module 1 from scripts module 2
  • CouchDB Views - 列出函数性能影响?

    你们中的许多人都知道 couchdb 视图的响应如下 rows key 1 value Col1 Some Value key 2 value Col1 Another Value 好吧 我想将其整理为 key 1 value Col1 S
  • 如何更改作为参数传递给函数的变量?

    我试图通过使用返回 void 的函数来更改结构内的一些变量 该函数采用 Struct 成员作为参数 结构数组和大小 该函数有一些代码 最终会更改结构成员内的一些变量 但是 我知道当您将某些内容作为参数传递给函数时 您正在使用副本而不是原始文