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

形参和实参

形参(形式参数)
函数定义时指定的参数,形参是用来接收数据的,函数定义时,系统不会为形参申请内存,只有当
函数调用时,系统才会为形参申请内存。主要用于存储实际参数,并且当函数返回时,系统会自动
回收为形参申请的内存资源。(本质上所有函数都有一个 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 ;
}

相关文章:

  • 强化学习入门
  • 12.按身高排序(贪心)思路解析+源码
  • C++初阶——简单实现vector
  • 动态规划(Dynamic Programming)详解
  • PLC扫描周期和工作原理
  • 【SQL】多表查询案例
  • 模型评测:基于Python和PyTorch的深度学习模型性能评估
  • leetcode 1155. 掷骰子等于目标和的方法数
  • AIGC训练效率与模型优化的深入探讨
  • redis的缓存击穿,雪崩,穿透
  • 大模型微调解读及参数设置实践示例
  • Python 正则表达式的非捕获组介绍
  • 亲测Windows部署Ollama+WebUI可视化
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 在nodejs中使用ElasticSearch(二)核心概念,应用
  • 从面试中的“漏掉步骤”谈自我表达与思维方式的转变
  • 【设计模式】【创建型模式】工厂方法模式(Factory Methods)
  • LeetCodehot 力扣热题100
  • Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
  • Django 5实用指南(五)模板系统
  • 欢迎回家!神十九返回舱成功着陆
  • 铁路上海站今日预计发送旅客65.8万人次,同比增长超16%
  • 金砖国家外长会晤发表主席声明,强调南方国家合作
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 发出“美利坚名存实亡”呼号的卡尼,将带领加拿大走向何方?
  • 物业也能成为居家养老“服务员”,上海多区将开展“物业+养老”试点