当前位置: 首页 > article >正文

15. 函数参数传递机制

1. 项目场景:

➢ 米粒对Jack Qiao说:“她在函数参数传递时,发现将一个变量传递给函数时,传递失败。”


2. 问题描述

➢ 举个栗子:用以下代码交换ab的值,结果失败:

 

#include<stdio.h>

void Swap(int x, int y)
{
    int temp = 0;
    temp = x;
    x = y;
    y = temp;
}

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    printf("交换之前的a=%d,b=%d\n", a, b);
    Swap(a, b); 
    printf("交换后的a=%d,b=%d\n", a, b);
    return 0;
}

 失败的结果如下


3. 原因分析:

 在米粒的原始代码中,Swap 函数的参数是按值传递的。这意味着当你调用 Swap(a, b) 时,x 和 实际上是 a 和 b 的副本。因此,米粒在 Swap 函数内部对 x 和 y 的修改不会影响到 main 函数中的 a b


4. 解决方案:

通过传递变量的地址可以在函数内部直接修改原始变量的值函数参数传递机制

#include<stdio.h>

void Swap(int* x, int* y)
{
    int temp = 0;
    temp = *x;
    *x = *y;
    *y = temp;
}

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    printf("交换之前的值:a=%d,b=%d\n", a, b);
    Swap(&a, &b);  // 传递变量的地址
    printf("交换之后的值:a=%d,b=%d\n", a, b);
    return 0;
}

 成功运行结果如下:

★ 总结

     ☞ 指针传递Swap 函数的参数是 int *x 和 int *y,表示它们是指向整数的指针。

     ☞ 修改原始变量:通过 *x 和 *y 访问并修改指针所指向的变量。

     ☞ 传递地址:在 main 函数中,通过 &a 和 &b 传递变量的地址。


http://www.kler.cn/a/403661.html

相关文章:

  • 科研实验室的数字化转型:Spring Boot系统
  • Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
  • 解决vm虚拟机中ctrl键粘滞问题(一直处于按下状态)
  • 在应用启动时,使用 UniApp 提供的 API 检查和请求权限。
  • SQL进阶技巧:如何进行数字范围统计?| 货场剩余货位的统计查询方法
  • 索贝融媒体 Sc-TaskMonitoring/rest/task/search SQL注入漏洞复现
  • syslog udp配置笔记
  • centos7.4+ 卸载jdk8 mysql5.7 安装openjdk11 mysql8
  • 白光干涉仪助力手机玻璃盖板品质提升
  • 基于MATLAB的相机内参标定及其原理——附实现教程
  • 【C++】栈、队列、双端队列与优先级队列
  • Nginx: 实现Websocket代理
  • python基础知识(七)——写入excel
  • Python | Leetcode Python题解之第564题数组嵌套
  • vue3 element el-table实现表格动态增加/删除/编辑表格行,带有校验规则
  • 吉林大学 超星慕课 高级语言程序设计 学习通部分题目极其答案
  • docker学习笔记跟常用命令总结
  • Docker和VMWare有什么不同
  • vue使用List.forEach遍历集合元素
  • Word_小问题解决_1
  • 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
  • 构建nginx1.26.1轻量级Docker镜像添加第三方模块nginx_upstream_check_module
  • 关于Redis单线程模型以及IO多路复用的理解
  • 【青牛科技】 GC3910:摇头机、舞台灯、Printer 和白色家电的理想驱动芯片是A3909/ALLEGRO 的优质国产替代
  • git自动转换换行符问题
  • python实现了一个基于深度学习的少样本视觉识别任务,并涉及到领域自适应(Domain Adaptation)的相关操作