形参和实参
- 创业
- 2025-08-25 23:09:02

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