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

C语言中值传递

C语言中,值传递的问题

#include <stdio.h> void modifyValue(int x) { x = 10; // 修改的是x的副本,对原始数据无影响 printf("在函数中修改的结果是:%d\n",x); 
}int main() { int a = 5; printf("Before: %d\n", a); modifyValue(a); // 传递a的值给modifyValue函数 printf("After: %d\n", a); // a的值仍然是5,因为modifyValue函数内修改的是x的副本return 0; 
}

C语言中值传递是函数参数传递的一种基本方式。值传递时,函数接收的是参数是一个复制的值。即两个不是同一个值,这意味着在函数内部对参数所做的任何修改都不会影响到传递给函数的原始数据。

这种值传递的场景是一个函数里面套了一个函数,这样就会产生一个局部变量的情况。

在这里插入图片描述

如果想要改变这个函数里的值, 经常用的方式有两种,一是使用全局变量,二是使用指针。

//使用指针传递值
#include <stdio.h>void modifyValue(int *x) {*x = 10; // 修改的是x的副本,对原始数据无影响printf("在函数中修改的结果是:%d\n",*x);
}int main() {int  a = 5;int *p =&a;printf("Before: %d\n", a);modifyValue(p); // 传递副本给modifyValue函数printf("After: %d\n", a); return 0;
}

在这里插入图片描述

当时产生了一个疑问是,指针传入的时候,不也是复制的值么,为啥指针就可以改了呢。
这个是因为指针的值虽然也是复制的,但是保存在指针里的值是一样的,即两个都是指向变量的地址,不一样的是变量地址的地址。即这个指针的地址。

总结:修改一个变量,一定是修改到这个变量的本身,所以会用指针的方式来修改变量。通过传入的是变量的地址。确保一定锁定到这个变量。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅
  • Python | Leetcode Python题解之第421题数组中两个数的最大异或值
  • 详细分析分布式事务场景、理论基础以及解决方法
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.1-2.2
  • python函数三:拆包和交换变量值、引用、匿名函数
  • 使用 uni-app 开发微信小程序的详细指南
  • Thymeleaf模板引擎
  • 【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码
  • Java项目基于docker 部署配置
  • shell指令及笔试题
  • alembic常用命令
  • QTCreator 调试:unknown debugger type “No engine“
  • 51单片机-红外遥控器(NEC标准)
  • MFC-基础架构
  • Redis——常用数据类型List
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Asm.js的简单介绍
  • export和import的用法总结
  • Hibernate最全面试题
  • JAVA 学习IO流
  • LeetCode18.四数之和 JavaScript
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Mybatis初体验
  • Python_OOP
  • Python进阶细节
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redash本地开发环境搭建
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Vultr 教程目录
  • 服务器之间,相同帐号,实现免密钥登录
  • 复杂数据处理
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 回流、重绘及其优化
  • 设计模式(12)迭代器模式(讲解+应用)
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我感觉这是史上最牛的防sql注入方法类
  • 一道闭包题引发的思考
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​虚拟化系列介绍(十)
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (多级缓存)多级缓存
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (六)Flink 窗口计算
  • (转)创业的注意事项
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .a文件和.so文件
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET 材料检测系统崩溃分析
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net和jar包windows服务部署