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

形参和实参

形参(形式参数)
函数定义时指定的参数,形参是用来接收数据的,函数定义时,系统不会为形参申请内存,只有当
函数调用时,系统才会为形参申请内存。主要用于存储实际参数,并且当函数返回时,系统会自动
回收为形参申请的内存资源。(本质上所有函数都有一个 return ,只不过当我们的函数返回类型是
void 类型的时候, return 是隐式)
// 关于默认 return
void fun1 ()
{
// 此时 return; 是不建议写出来的,这时候的 return; 隐式的
}
int fun2 ()
{
// 此时默认为 return 0; 这里建议写出来
}
// 关于函数的跳出处理
void fun3 ( int n )
{
if ( n % 2 == 0 )
{
printf ( "%d 是偶数 !\n" , n );
return ;
}
printf ( "%d 是奇数! \n" , n );
}
int fun4 ( int n )
{
if ( n % 2 == 0 )
{
printf ( "%d 是偶数 !\n" , n );
return - 1 ;
}
printf ( "%d 是奇数! \n" , n );
return 0 ;
}
实参(实际参数)
函数调用时主调函数传递的数据参数(常量、符号常量、变量、表达式 ... ,只要有确定的值),
实参就是传递的数据。
实参和形参必须类型相同,如果不同时,按赋值规定进行类型转换。
C 语言中,参数传递必须遵循 单向值传递 ,实参只是将自身的值传递给形参,而不是实参本
身。形参的值的改变不会影响实参。
int fun ( int n )
{
printf ( "%d\n" , n ); // 10
}
int main ()
{
int a = 10 ;
fun ( a ); // 这里的意思是,只是将 a 的值拷贝了一份副本传递给了形参 n
a = 20 ;
}
实参与形参在内存中占据不同的内存空间,(建议实参和形参名称是一样的)
double fun ( double a , double b )
{
return a + b ;
}
int main ()
{
int x = 12 , y = 13 ;
int c = ( int ) fun ( 12 , 13 );
// 通过案例:传参时,我们将 int 类型赋值给 double 类型,此时程序不报错,因为符合自动类型转换的规
// 通过案例:返回时,我们将 double 类型赋值给 int 类型,此时将满足强制类型转换的条件,需要手动转
}
案例
案例 1
需求:输入两个整数,要求用一个函数求出最大数
代码:
#include <stdio.h>
/**
* 定义一个函数,求两个数中的最大数
* @param x,y :外部传入的整数
* @return 最大值
*/
int max ( int x , int y )
{
return x > y ? x : y ;
}
int main ( int argc , char * argv [])
{
int a , b , c ;
printf ( " 请输入第 1 个数: \n" );
if ( scanf ( "%d" , & a ) != 1 )
{
// 清除缓冲
while ( getchar () != '\n' );
printf ( " 输入有误 !\n" );
return - 1 ;
}
printf ( " 请输入第 2 个数: \n" );
if ( scanf ( "%d" , & b ) != 1 )
{
// 清除缓冲
while ( getchar () != '\n' );
printf ( " 输入有误 !\n" );
return - 1 ;
}
// 求最大值
c = max ( a , b );
printf ( "%d,%d 中的最大值是 %d\n" , a , b , c );
return 0 ;
}
函数的返回值
若不需要返回值,函数可以可以没有 return 语句。
// 这种写法,没有返回值 return;
void fun1 ()
{
}
// 这种写法,有返回值,返回 return 0
int fun2 ()
{
}
// 这种写法,有返回值,返回 return 0
fun3 () // 返回类型标识符如果不写,默认是 int
{
}
一个函数中可以有多个 return 语句,但任一时刻只有一个 return 语句被执行。
int eq ( int num )
{
if ( num % 2 == 0 )
{
printf ( "%d 是偶数 \n" , num );
return 0 ;
}
printf ( "%d 是奇数 \n" , num );
return 0 ;
}
被调函数返回给主调函数的结果数据(可以是变量、常量、表达式 ... ,只要是确定值就可以了)
int fun1 ( int a , int b )
{
return a + b ; // 返回表达式,表达式的结算结果是 int
}
int fun2 ( int num )
{
if ( num % 2 == 0 ) return 0 ;
return - 1 ; // 返回常量
}
返回值类型一般情况下要和函数中 return 语句返回的数据类型一致,如果不一致,以函数定时
指定的返回类型为标准。也就是返回值类型和实际返回值的类型可以存在转换转换关系,一般
是将 返回值类型 返回类型
案例
需求:输入两个整数,要求用一个函数求出最大值
案例 1
#include <stdio.h>
/**
* 定义一个函数,求两个数中的最大数
* @param x,y :外部传入的整数
* @return 最大值
*/
int max ( int x , int y )
{
if ( x > y )
return x ;
return y ;
}
int main ( int argc , char * argv [])
{
int a , b , c ;
printf ( " 请输入第 1 个数: \n" );
if ( scanf ( "%d" , & a ) != 1 )
{
// 清除缓冲
while ( getchar () != '\n' );
printf ( " 输入有误 !\n" );
return - 1 ;
}
printf ( " 请输入第 2 个数: \n" );
if ( scanf ( "%d" , & b ) != 1 )
{
// 清除缓冲
while ( getchar () != '\n' );
printf ( " 输入有误 !\n" );
return - 1 ;
}
// 求最大值
c = max ( a , b );
printf ( "%d,%d 中的最大值是 %d\n" , a , b , c );
return 0 ;
}

相关文章:

形参和实参

形参&#xff08;形式参数&#xff09; 函数定义时指定的参数&#xff0c;形参是用来接收数据的&#xff0c;函数定义时&#xff0c;系统不会为形参申请内存&#xff0c;只有当 函数调用时&#xff0c;系统才会为形参申请内存。主要用于存储实际参数&#xff0c;并且当函数返…...

【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键&#xff0c;或者扩展按键的需求。亦或者是在某些场景下&#xff0c;禁止用户按下某些按键的业务需求。 这两种需求&#xff0c;鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…...

【Spring详解五】bean的加载

五、bean的加载 当我们显示或者隐式地调用 getBean() 时&#xff0c;则会触发加载 bean 阶段。示例代码如下&#xff1a; public class AppTest {Testpublic void MyTestBeanTest() {BeanFactory bf new XmlBeanFactory( new ClassPathResource("spring-config.xml"…...

5.8 Soft Prompt技术:提示编码器的微调革命

Soft Prompt技术:提示编码器的微调革命 一、Prompt Encoder技术全景图 mindmap root((Prompt Encoder)) P-Tuning v1 双向LSTM编码 可微提示优化 P-Tuning v2 多层感知机编码 任务特定初始化 Prompt Encoder 可学习提示向量 层级提示插入 Prompt Encoder的核心优…...

Qt之多线程处理

在现代应用程序开发中,多线程处理是提高程序性能和响应速度的重要手段。Qt作为一个功能强大的跨平台C++框架,提供了丰富的多线程支持。 Qt多线程基础 Qt中的多线程处理主要依赖于QThread类。QThread类封装了底层的线程启动、运行和终止等细节,每个QThread对象代表一个独立…...

ThinkPHP(TP)如何做安全加固,防webshell、防篡改、防劫持、TP漏洞防护

ThinkPHP是一款非常知名的PHP框架&#xff0c;很多知名CMS系统都是采用TP框架进行二次开发而来&#xff0c;当然ThinkPHP本身也可以直接建站&#xff0c;开源免费、功能强大&#xff0c;深受广大用户喜欢。 虽然ThinkPHP非常优秀&#xff0c;但是为了保障网站安全&#xff0c;我…...

例题:求算法的时间复杂度

xn; // n>1 y0; while(x>(y1)*(y1)) y; 算法行为解析 初始化&#xff1a;x n&#xff08;n > 1&#xff09;&#xff0c;y 0。循环条件&#xff1a;while (x > (y1)*(y1))。循环体&#xff1a;每次迭代中 y 递增 1。 目标&#xff1a;找到最大的整数 y&#x…...

MySQL(1)基础篇

执行一条 select 语句&#xff0c;期间发生了什么&#xff1f; | 小林coding 目录 1、连接MySQL服务器 2、查询缓存 3、解析SQL语句 4、执行SQL语句 5、MySQL一行记录的存储结构 Server 层负责建立连接、分析和执行 SQL存储引擎层负责数据的存储和提取。支持InnoDB、MyIS…...

分裂栅结构对碳化硅MOSFET重复雪崩应力诱导退化的抑制作用

标题 Suppression Effect of Split-Gate Structure on Repetitive Avalanche Stress Induced Degradation for SiC MOSFETs&#xff08;TED 24年&#xff09; 文章的研究内容 这篇文章的研究探讨了重复雪崩应力对碳化硅&#xff08;SiC&#xff09;MOSFET器件退化的影响&am…...

Could not initialize class io.netty.util.internal.Platfor...

异常信息&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.PlatformDependent0 Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjec…...

贝叶斯估计习题

x x x 是来自如下指数分布的一个观察值 p ( x ∣ θ ) e − ( x − θ ) , x ≥ θ p(x|\theta)e^{-(x-\theta)},x\geq\theta p(x∣θ)e−(x−θ),x≥θ 取柯西分布作为 θ \theta θ 的先验分布 π ( θ ) 1 π ( 1 θ 2 ) \pi(\theta)\frac{1}{\pi(1\theta^2)} π(θ)π…...

JavaEE基础之- xml

目录 一、xml概述 1.什么是xml 2.W3C组织 3.XML的作用 4.XML与HTML比较 5.XML和properties&#xff08;属性文件&#xff09;比较 二、XML语法概述 1.文档展示 2.XML文档的组成部分 3.xml文档声明 3.1 什么是xml文档声明 3.2 xml文档声明结构 4.xml元素 4.1 xml元素的格…...

网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施

文章目录 GRE隧道&#xff08;通用路由封装&#xff0c;Generic Routing Encapsulation&#xff09;协议号47实验&#xff1a;思科&#xff1a;开始实施&#xff1a; 华为&#xff1a;开始实施&#xff1a; eBGP实施思科&#xff1a;华为&#xff1a; GRE隧道&#xff08;通用路…...

RK3568开发板/电脑/ubuntu处于同一网段互通

1.查看无线局域网适配器WLAN winR输入cmd打开电脑终端输入ipconfig或arp -a查看无线局域网IP地址&#xff0c;这就是WIFI. 这里的IPv4是192.168.0.147&#xff0c;默认网关是192.168.0.1&#xff0c;根据网关地址配以太网IP, ubuntu的IP,和rk3568的IP。 且IP范围为192.168.…...

Java常用注解--@FunctionalInterface 函数式接口

文章目录 1 定义要求2 实现方式1. Lambda 表达式2. 方法引用3. 内置函数式接口 3 自定义函数式接口的典型用途1 简化回调逻辑1.1 使用函数式接口简化&#xff0c;1.2 灵活扩展 2 组合函数 4 实践举例4.1 资源清理&#xff08;自动关闭&#xff09;4.2 策略模式&#xff08;动态…...

Xen Center虚拟机Centos 7.x磁盘扩容

文章目录 概要XenCenter虚拟机操作系统命令概览扩容步骤 概要 适用于Centos 7.x系统磁盘扩容&#xff0c;不区分是否虚拟机或者实体系统 XenCenter 使用Xen Center客户端给对应的虚拟机添加一块磁盘后&#xff0c;启动虚拟机系统在系统中进行扩容 虚拟机操作系统 Centos 7.…...

如何调用 DeepSeek API:详细教程与示例

目录 一、准备工作 二、DeepSeek API 调用步骤 1. 选择 API 端点 2. 构建 API 请求 3. 发送请求并处理响应 三、Python 示例&#xff1a;调用 DeepSeek API 1. 安装依赖 2. 编写代码 3. 运行代码 四、常见问题及解决方法 1. API 调用返回 401 错误 2. API 调用返回…...

MySQL_事务的四大特性

1.事务的什么 在学习MySQL的初期&#xff0c;我们通常都是一个一个sql语句的执行&#xff0c;但是在实际开发过程中&#xff0c;我们经常是多个sql语句一起执行&#xff0c;这种多个sql语句在逻辑上要一起执行的就可以看做是一个事务&#xff0c;组成这个事务的多个sql&#x…...

如何在Jenkins上查看Junit报告

在 Jenkins 上查看 JUnit 报告通常有以下几个步骤&#xff1a; 构建结果页面: 首先&#xff0c;确保你的 Jenkins 构建已经执行完毕&#xff0c;并且成功生成了 JUnit 报告。前往 Jenkins 主页面&#xff0c;点击进入相应的项目或流水线。 构建记录: 选择你想查看的特定构建记…...

【深度学习】计算机视觉(CV)-图像生成-风格迁移(Style Transfer)

风格迁移&#xff08;Style Transfer&#xff09; 风格迁移是一种计算机视觉技术&#xff0c;可以将一张图像的内容和另一张图像的风格融合在一起&#xff0c;生成一张既保留原始内容&#xff0c;又带有目标风格的全新图像&#xff01;这种方法常用于艺术创作、图像增强、甚至…...

Nginx 配置:alias 和 root 的区别

在 Nginx 的配置中&#xff0c;alias 和 root 是两个用于映射文件路径的重要指令。虽然它们的功能表面相似&#xff0c;实际使用中却有显著的差异。如果不清楚两者的用法和特点&#xff0c;可能会导致资源路径错误或访问异常。本文将详细解析它们的区别&#xff0c;并提供实用示…...

深入理解 QObject的作用

QObject 作为 Qt 库中所有对象的基类&#xff0c;其地位无可替代。几乎 Qt 框架内的每一个类&#xff0c;无论是负责构建用户界面的 QWidget&#xff0c;还是专注于数据处理与呈现的 QAbstractItemModel&#xff0c;均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…...

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型&#xff0c;并且如何给Deepseek模型投喂数据、搭建本地知识库&#xff0c;但大部分人不知道怎么应用&#xff0c;让自己的项目接入AI模型。 文末有彩蛋哦&#xff01;&#xff01;&#xff01; 要接入本地部署的deepsee…...

JAVA中常用类型

一、包装类 1.1 包装类简介 java是面向对象的语言&#xff0c;但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点&#xff0c;为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型&#xff0c;这八种具有面向对象特征的类型&#xff0c;就叫做包…...

PostgreSQL学习的必要性

据分析师、运维工程师&#xff0c;还是技术决策者&#xff0c;掌握 PostgreSQL 都能带来显著的优势。以下是其必要性的核心要点&#xff1a;企业级开源数据库的首选 功能全面性&#xff1a;PostgreSQL 支持复杂的 SQL 查询、事务&#xff08;ACID 特性&#xff09;、多版本并发…...

使用 GPTQ 进行 4 位 LLM 量化

权重量化方面的最新进展使我们能够在消费级硬件上运行大量大型语言模型&#xff0c;例如 RTX 3090 GPU 上的 LLaMA-30B 模型。这要归功于性能下降最小的新型 4 位量化技术&#xff0c;例如GPTQ、GGML和NF4。 在本文中&#xff0c;我们将探索流行的 GPTQ 算法&#xff0c;以了解…...

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存&#xff08;RedisCaffeine&#xff09;同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...

【CUDA】Pytorch_Extensions

【CUDA】Pytorch_Extensions 为什么要开发CUDA扩展&#xff1f; 当我们在PyTorch中实现自定义算子时&#xff0c;通常有两种选择&#xff1a; 使用纯Python实现&#xff08;简单但效率低&#xff09;使用C/CUDA扩展&#xff08;高效但需要编译&#xff09; 对于计算密集型的…...

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天&#xff0c;为了提升并发量最直观的办法需要水平扩展服务器的数量&#xff0c;三台服务器可以容纳六万左右的客户端。 负载均衡器的作用&#xff1a; 把client的请求按照负载均衡算法分发到具体…...

使用 NVM 随意切换 Node.js 版本

安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程&#xff08;卸载旧的nodejs&#xff0c;安装nvm、node、npm、cnpm、yarn及环境变量配置&#xff09;-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...