C 中的指针(将地址传递给函数)

2023-12-28

我正在尝试解决这个问题。问题说,*“swap_nums 似乎有效,但 swap_pointers 无效。修复它。”* 顺便说一句,我是初学者:)

我相信我可以自己解决这个问题,但问题是我有点难以理解 C 语言中的一些编程概念。这里我展示了需要编辑的给定代码。下面我将展示到目前为止我的思维过程。请注意:我想要一些提示,而不是完整的解决方案。 :-)

#include <stdio.h>
#include <stdlib.h>

void swap_nums(int *x, int *y);
void swap_pointers (char *x, char *y);

int main (int argc, char *argv[]){

   int a = 3, b = 4;
   char *s1, *s2;
   swap_nums(&a, &b);
   printf("a is %d\n", a);
   printf("b is %d\n", b);

   s1 = "I should print second";
   s2 = "I should print first";

   swap_pointers(s1, s2);
   printf("s1 is %s\n", s1);
   printf("s2 is %s\n", s2);

   return EXIT_SUCCESS; } 

void swap_nums(int *x, int *y){

   int temp;
   temp = *x;
   *x = *y;
   *y = temp; }

void swap_pointers (char *x, char *y){

   char *temp;
   temp = x;
   x = y;
   y = temp; }

我的思考过程:我相信这个程序会交换整数变量 a 和 b。然后它将获取两个声明的字符串并交换它们。

主功能:

int a = 3, b = 4;

将变量 a 和 b 分别赋值给 3 和 4。

char *s1, *s2;

创建一个字符指针变量(它将保存字符的地址)

swap_nums(&a, &b);

函数 swap_nums 正在发生。我现在将解释我的思维过程。

void swap_nums(int *x, int *y){

所以我不太熟悉将东西传递给函数,如果我在这里错了,有人可以纠正我要说的吗?

在我看来,我们将 & 符号所示的 a 和 b 的地址传递到函数 swap_nums 中。但是为什么我们有 int *x 和 int *y 呢?我在这里有点困惑。有人可以向我解释一下吗?


在 C 中,一切都作为值传递,包括指针。因此,交换指针的代码会操作指针副本,而使原始指针保持不变。

为了交换指针,您需要将指针传递给指针,而不仅仅是指针。当然,在函数内部,您需要添加一定程度的取消引用,就像在swap_numbers:

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

C 中的指针(将地址传递给函数) 的相关文章

  • 自动映射器多对一映射

    我想将一种类型映射到另一种类型 但我在第一种类型中有多个属性 需要获取其他类型的一个属性 例如 public class A public int a get set public int b get set public int c ge
  • Hololens 应用程序将不再构建 - 引用元数据文件丢失且找不到 c-Sharp.firstpass

    我已按照 Microsoft 在其多个项目下列出的确切步骤进行操作微软全息 学院 https developer microsoft com en us windows holographic academy教程 我完成了所有这些 并且从创
  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • ScrollableControl 在整个控件周围绘制边框

    我正在构建基于的自定义用户控件ScrollableControl 现在我正在尝试在控件周围添加边框 类似于 DataGridView 的边框 我可以使用以下方法绘制边框 e Graphics TranslateTransform AutoS
  • 有没有办法使用 ews c# 确定电子邮件是否是回复/响应?

    我正在编写一个支持系统 这是我第一次使用 EWS 到目前为止 我已经相当成功了 我可以提取我需要的信息 发送电子邮件 一切正常 我确实有点头疼 有没有办法判断电子邮件是否实际上是回复 该应用程序的基本思想是有人发送电子邮件 我们回复并给他们
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • 使用 Rhino Mocks 模拟集合

    所以我猜这是很多人想做的事情 模拟集合 过去我用 Rhino 做过这样的事情 var col mock MockRepository GenerateMock
  • 如何转换 UTF-8 <-> UTF16 可移植

    有没有一种简单 可移植的方法 至少是 win32 linux 将 UTF 16 转换为 UTF 8 并返回 最好使用升压 谢谢你的帮助 托比亚斯 Both libiconv http www gnu org software libicon
  • Makefile:如何正确包含头文件及其目录?

    我有以下 makefile CC g INC DIR StdCUtil CFLAGS c Wall I INC DIR DEPS split h all Lock o DBC o Trace o o cpp DEPS CC o lt CFL
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • 在 Windows 上构建 MLT 框架时出错

    我一直在遵循官方提供的构建指南here http www mltframework org bin view MLT WindowsBuild 我需要 MLT 来创建视频播放器 并且我选择仅安装前 4 个库 如指南中所述 FFmpeg SD
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的
  • 阅读《Effective、MoreEffective 和Effective Modern C++(和 STL)》的首选顺序是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 据我所知 More effective C 是 Effective C 的扩展 而 Effective Modern C 则专注于 C 11 和
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参
  • 布尔实现的atomicCAS

    我想弄清楚是否存在错误答案 https stackoverflow com a 57444538 11248508 现已删除 关于Cuda like的实现atomicCAS for bool是 答案中的代码 重新格式化 static inl

随机推荐

  • Vanilla javascript Trap 模式中的焦点(辅助功能选项卡)

    这应该很简单 但由于某种原因它不起作用 我在正确的时间获得了正确的 console logs 但焦点没有到达正确的位置 请参考我的 jsfiddle https jsfiddle net bqt0np9d https jsfiddle ne
  • 使用 XPath Java 设置节点值

    我正在尝试通过 XPath 设置节点值 我有以下内容 但它似乎没有改变实际文件值 XPathFactory factory XPathFactory newInstance XPath xPath factory newXPath xPat
  • 如何在 DynamoDB 中创建 UUID?

    在我的数据库方案中 我需要一个自动增量主键 我怎样才能实现这个功能呢 PS 为了访问 DynamoDB 我使用dynode https github com Wantworthy dynode Node js 模块 免责声明 我是 Dyna
  • 如果空间不足,则隐藏标签 D3 可缩放旭日图

    所以我知道这个答案是为了隐藏不适合图表的文本 D3 如果有足够的空间 在饼图中放置圆弧标签 https stackoverflow com questions 19792552 d3 put arc labels in a pie char
  • 似乎无法清理分离的 DOM 元素

    我在用着jquery ui 选项卡 http jqueryui com tabs 我遇到了删除选项卡时出现的问题 该选项卡及其内容 div 似乎已被删除 但当您查看 Chrome DevTools 配置文件中的堆时 删除选项卡后 您会发现选
  • 相当于 Scala dropWhile

    我正在努力寻找一种方法来根据谓词跳过流开头的某些元素 像这样的事情 dropWhile n gt n lt 3 Stream of 0 1 2 3 0 1 2 3 4 forEach System out println 3 0 1 2 3
  • 通过浏览器后退按钮访问时重新加载网站

    问题 我有一个包含动态内容的网站 每次用户看到它时都需要重新加载 这包括当用户点击另一个站点上的后退按钮并到达需要重新加载的站点时的用例 大多数 全部 浏览器在此事件后不会刷新网站 我的解决方案 不太有效 http www hunlock
  • C++ 异常处理

    所以我正在编写一些代码 我注意到除了语法 类型和其他编译时错误之外 C 不会抛出任何其他异常 所以我决定用一个非常简单的程序来测试一下 include
  • 列表视图设置自定义波纹选择器

    我尝试在以下条件下在 Lollipop 上使用列表视图控件 主题类型是默认的Theme Material 深色主题 列表视图包含在具有白色背景的较大布局内 列表视图应该有一个以白色背景出现的列表选择器 注意 我被迫使用自定义列表选择器颜色
  • Python 换出 sys.modules 并不像直觉那样工作

    我正在尝试设置字典sys modules在寻找答案时另一个问题 https stackoverflow com q 42134260 2988730并发现了一些有趣的事情 链接的问题涉及消除导入模块的所有影响 基于另一个帖子 https s
  • 如何在 Java 单例中维护可变状态

    我有一个 Java 中的单例 在 OSGi 服务中 并且想要维护其中的某些状态 计数器 这个变量应该是静态的吗 或同步 或两者 或者我应该将操作包装在同步方法中 这与仅仅使 var 同步有什么不同吗 我希望服务操作的消费者增加此计数器 pu
  • WPF 中的水平菜单和水平子菜单

    我一直在与 WPF 作斗争Menu我根本无法实现我想要的目标 我尝试更改默认样式Menu and MenuItem控制 但这结果很糟糕 然后我尝试使用控件模板来设计它的样式 但是 我想我开始意识到我的 WPF 技能还不具备 这是我想要的结果
  • XAML WebView 绑定到字符串在 Xamarin Forms 中不起作用

    我是 C 和 Xamarin Forms 的新手 我有一个 webview 并从 API 获取源 url 对于这个问题 我已经对值进行了硬编码 我绑定了源 url 而不是将值添加到 XAML 中的 Source 但这不起作用 堆栈和论坛中的
  • 如何在java中读取或解析MHTML(.mht)文件

    我需要开采content大多数已知的文档文件 例如 pdf html 文档 docx等 对于大多数文件格式 我计划使用 http tika apache org http tika apache org 但截至目前Tika不支持 MHTML
  • 如何重置/清除 erlang 终端

    我正在尝试重置提示 忘记所有变量并从第 1 行开始提示 gt 我知道以下内置函数 f forget all io format e H e J clear screen and moving cursor to the begin of t
  • Intellij IDEA无法导入两个包含同名子模块的gradle项目

    我有两个 gradle 项目 projectA 子模块 projectB 子模块 两个子模块具有相同的名称 但组 ID 不同 当我尝试将两个项目导入到 IDEA 中的同一工作区时 它正确导入一个项目 根模块 子模块 并且仅导入第二个项目的根
  • 获取线段和 2^n 网格之间的所有交点(以整数表示)

    我有一条从 x0 y0 到 x1 y1 的线 穿过由 2 n 宽的方形瓷砖组成的网格 我不仅需要找到线相交的图块 还需要找到相应的入口点和出口点 我可以找到所有关于此的问题都涉及 1x1 图块 而不关心图块内交叉点的位置 这些点并不总是精确
  • 第一次后按时 searchview 未正确关闭(它只是失去焦点)

    我必须按两次后退按钮才能关闭SearchView 为什么 第一次按下时 SearchView只会失去焦点 Setting setOnKeyListener on SearchView也不起作用 顺便说一句 我正在使用 ABS 实现 我的代码
  • javascript 中有效的 base64 图像字符串出现 DOM 异常 5 INVALID CHARACTER 错误

    我正在尝试将图像的 Base64 字符串解码回二进制 以便操作系统可以在本地下载和显示它 当将字符串作为带有数据 URI 前缀 数据 img png base64 的 HTML IMG 元素的 src 时 我成功渲染了字符串 但是当使用 a
  • C 中的指针(将地址传递给函数)

    我正在尝试解决这个问题 问题说 swap nums 似乎有效 但 swap pointers 无效 修复它 顺便说一句 我是初学者 我相信我可以自己解决这个问题 但问题是我有点难以理解 C 语言中的一些编程概念 这里我展示了需要编辑的给定代