C语言中函数的参数传递机制(值传递、指针传递)

在C语言中,函数的参数传递机制主要有两种:值传递(Pass by Value)和指针传递(Pass by Reference,虽然C语言中没有直接的“Pass by Reference”这一术语,但通常使用指针来实现类似的效果)。

1. 值传递(Pass by Value)

值传递是C语言中默认的参数传递方式。当使用值传递时,函数接收的是参数值的副本,而不是参数本身。这意味着在函数内部对参数所做的任何修改都不会影响到传递给函数的原始变量。

示例

 

c复制代码

#include <stdio.h>
void modifyValue(int x) {
x = x * 2; // 修改的是x的副本,原变量不受影响
}
int main() {
int num = 5;
modifyValue(num);
printf("num is %d\n", num); // 输出:num is 5
return 0;
}

在上面的示例中,modifyValue函数接收了一个int类型的参数x。当我们在函数内部将x的值改为x * 2时,实际上修改的是x的副本,而不是原始变量num。因此,在main函数中打印num的值时,它仍然是5。

2. 指针传递(通过指针实现类似“引用传递”的效果)

虽然C语言没有直接的引用传递,但我们可以使用指针来实现类似的效果。当使用指针作为参数时,函数接收的是指向实际数据的指针,而不是数据的副本。因此,在函数内部对指针所指向的数据所做的任何修改都会影响到原始数据。

示例

 

c复制代码

#include <stdio.h>
void modifyPointer(int *ptr) {
*ptr = *ptr * 2; // 修改的是ptr指向的数据,原变量受影响
}
int main() {
int num = 5;
modifyPointer(&num); // 传递num的地址给函数
printf("num is %d\n", num); // 输出:num is 10
return 0;
}

在上面的示例中,modifyPointer函数接收了一个指向int类型的指针ptr。当我们在函数内部将*ptr的值改为*ptr * 2时,实际上修改的是ptr所指向的数据,即原始变量num。因此,在main函数中打印num的值时,它变为了10。

需要注意的是,虽然使用指针可以实现类似引用传递的效果,但指针本身仍然是通过值传递的。也就是说,函数接收的是指针变量的副本,但这个副本指向的是原始数据。因此,在函数内部修改指针所指向的数据是有效的,但修改指针本身(即让它指向不同的地址)则不会影响到原始指针变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理之指令寻址

一、顺序寻址 1、定长指令字结构 2、变长指令字结构 二、跳跃寻址 三、数据寻址 1、直接寻址 2、间接寻址 3、寄存器寻址 寄存器间接寻址 4、隐含寻址 5、立即寻址 6、偏移寻址 1、基址寻址 2、变址寻址 3、相对寻址

力扣199. 二叉树的右视图

给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: [] /*** Def…

纸片战争(信息课神器,断网也可以玩)

作品简介及操作说明 作品介绍&#xff1a; 游戏背景&#xff1a; 阿尔法国遭到了厄普西隆国的入侵。为了保卫祖国&#xff0c;阿尔法人迅速组织部队进行抗争&#xff0c;而你&#xff0c;将作为阿尔法人的指挥官亲历这场战争。 玩法类似游戏《红色警戒》&#xff0c;指挥部队、…

Spring 怎么解决循环依赖的问题?

Spring框架解决循环依赖主要通过三级缓存来实现&#xff0c;这主要发生在Spring容器创建bean的过程中。以下是Spring解决循环依赖的基本步骤&#xff1a; 一级缓存&#xff08;singletonObjects&#xff09;&#xff1a;存放已经创建好的单例对象&#xff0c;供其他bean引用。 …

语法分析!!!

一、实验题目 根据给定文法编写调试预测分析程序&#xff0c;对任意输入串用预测分析法进行语法分析。 二、实验目的 加深对预测分析法的理解。 三、实验内容 四、实验代码 #include <iostream> #include <stdio.h> #include <string> #include <…

隐式链接DLL

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 【例9.5】创建的基于MFC对话框的应用程序MFCImLink2&#xff0c;隐式链接例9.2创建的MFCLibrary2.dll&#xff0c;使用其中的导出函数求正方形的面积。 (1) 使用MFC应用程…

【零基础一看就会】Python爬虫从入门到应用(下)

目录 一、urllib的学习 1.1 urllib介绍 1.2 urllib的基本方法介绍 urllib.Request &#xff08;1&#xff09;构造简单请求 &#xff08;2&#xff09;传入headers参数 &#xff08;3&#xff09;传入data参数 实现发送post请求&#xff08;示例&#xff09; response.…

野火FPGA跟练(四)——串口RS232、亚稳态

目录 简介接口与引脚通信协议亚稳态RS232接收模块模块框图时序波形RTL 代码易错点Testbench 代码仿真 RS232发送模块模块框图时序波形RTL 代码Testbench 代码仿真 简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&#xff0c;异步串行通信接口。发送数据时…

网络流媒体协议——RTMP

流媒体协议常用实时信息传输协议(Real-Time Messaging Protocol,RTMP)和 HLS 协议。RTMP 为应用层协议,由 TCP 提供传输层的连接和传输服务,默认端口为1935。 RTMP URL rtmp://host:port/app/steamrtmp∶ 表示该URL必须以RTMP进行解析。host, port 分别表示主机地址和端口…

微服务开发与实战Day04

一、网关路由 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 在SpringCloud中网关的实现包括两种&#xff1a; 1. 快速入门 Spring Cloud Gateway 步骤&#xff1a; ①新建hm-gateway模块 ②引入依赖pom.xml(hm-gateway) <?xml version…

解锁俄罗斯市场:如何选择优质的俄罗斯云服务器

在当前云计算市场上&#xff0c;很多大型的云厂商并没有俄罗斯服务器的云节点&#xff0c;这给许多企业在拓展海外业务时带来了一定的困扰。然而&#xff0c;俄罗斯作为一个经济发展迅速的国家&#xff0c;其市场潜力不可忽视。因此&#xff0c;选择一台优质的俄罗斯云服务器成…

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中&#xff0c;创建数据库的SQL命令相对简单&#xff0c;基本语法如下&#xff1a; CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误&#xff0c;可以添加 IF NOT EXISTS 子句&#xff0c;这样如…

04-4.1.2 串的存储结构

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 &#x1f31e;0.前言 &#x1f688;1.二叉树链式结构的代码是实现 &#x1f688;2.二叉树的遍历及代码实现和深度刨析代码 &#x1f69d;2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 &#x1f69d;2.2中序遍历 ✈…

Spring boot SSL证书路径配置

SSL证书路径配置: 1、打包到resouce下&#xff1a; server:port: 443ssl:enabled: truekey-store: classpath:XX.XX.com.p12key-store-password: your-passwordkeyStoreType: PKCS12keyAlias: your-alias 2、放到windows类型服务器硬盘上 Windows系统中&#xff0c;由于路径…

一些常用的frida脚本

这里整理一些常用的frida脚本&#xff0c;和ghidra 一起食用风味更佳&#xff5e; Trace RegisterNatives 注意到从java到c的绑定中&#xff0c;可能会在JNI_OnLoad动态的执行RegisterNatives方法来绑定java层的函数到c行数&#xff0c;可以通过这个方法&#xff0c;来吧运行…

VSCode 1.90版本 升级需谨慎~(Python)

由于再次出现justMyCode的问题&#xff0c;请使用Python的小伙伴要谨慎将Visual Studio Code升级到1.90版本&#xff08;两天前官方刚发布的&#xff09; 若已经升级到1.90的小伙伴&#xff0c;可以从这里下载1.89版本进行“补救“&#xff1a; 1.89.1版本下载链接&#xff1a;…

Android 14.0 修改wifi信号强度和信号等级

1.前言 在14.0的系统rom产品定制化开发中,在进行产品开发中,对应系统定制会有各种各样的需求,对纯wifi产品而言,对于wifi要求也是越来越高,因此有客户要求对wifi信号强度做定制,修改信号强度来增强显示wifi信号,所以要对wifi显示信号强度的相关代码做修改 2.修改wifi信…

计算机网络:数据链路层 - 扩展的以太网

计算机网络&#xff1a;数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网&#xff0c;他最初使用粗铜轴电缆作为传输媒体&#xff0c;后来演进到使用价格相对便宜的细铜轴电缆。 后来&#xff0c;以太网发展出来了一种使用大规模…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义&#xff0c;Agent执行器&#xff0c;本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列&#xff1a;从现象看机制&#xff08;上篇&#xff09; AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…