形参和实参
形参(形式参数):
函数定义时指定的参数,形参是用来接收数据的,函数定义时,系统不会为形参申请内存,只有当函数调用是,系统才会为形参申请内存,用于存储实际参数,并且当函数返回,系统会自动回收为形参申请的内存资源。(本质上所有函数都有return,只不过当我们的函数返回类型是void类型的时候,return是作为隐式的)
实参(实际参数):
函数调用时主调函数传递的数据参数(常量、符号常量、变量、表达式.,只要有确定的值),实参是传递的数据。
实参和形参必须类型相同。如果不同时,按赋值规定自动进行类型转换。
在C语言中,参数传递必须遵循单向值传递 ,实参只是将自身的值传递给形参,而不是实参本身。形参的值的改变不会影响实参。
实参与形参在内存中占据不同的内存空间,(尽可能实参和形参名称是一样的)
double fun(double a,double b);
{
return a + b;
}
int main()
{
int x = 12,y = 13;
int c = (int)fun(x,y);
// 通过案例:传参时-我们将int类型赋值给double类型,此时程序不报错,因为此时会发生自动类型转换(隐
式转换)
// 通过案例:返回时-我们将double类型赋值给int类型,此时将满足强制类型转换条件,需要我们手动转换
}
案例:
#include <stdio.h>
/**
* 需求:函数案例-输入两个整数,要求用一个函数求出最大值,并在主调函数输出次数
*/
int max(int x,int y)
{
return x > y ? x : y;
}
int main(int argc,char *argv[])
{
int a,b,c;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
// 调用函数求最大值
c = max(a,b);
printf("%d,%d中的最大值是%d\n",a,b,c);
return 0;
}
函数的返回值
若不需要返回值,函数中可以没有return语句。
一个函数中可以有多个return语句,但任一时刻只有一个return语句被执行。
被调函数返回给主调函数的结果数据(可以是变量、常量、表达式.,只要是确定值就可以了)。
返回值类型一般情况下要和函数中return语句返回的数据类型保持一致,如果不一致,以函数定义时指定的返回类型为标准。
也就是返回值类型和实际返回值可以存在自动类型或者强制类型转换的关系。
案例1:
#include <stdio.h>
/**
* 需求:函数案例-输入两个整数,要求用一个函数求出最大值,并在主调函数输出次数
*/
int max(int x,int y)
{
if(x > y)
{
return x;// 一旦return,return后的代码将不再执行
}
return y;
}
int main(int argc,char *argv[])
{
int a,b,c;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
// 调用函数求最大值
c = max(a,b);
printf("%d,%d中的最大值是%d\n",a,b,c);
return 0;
}
案例2:
/**
* 需求:函数案例-输入两个整数,要求用一个函数求出最大值,并在主调函数输出次数
*/
double max(int x,int y)
{
if(x > y)
{
return x;// 一旦return,return后的代码将不再执行
}
return y;
}
int main(int argc,char *argv[])
{
int a,b,c;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
// 调用函数求最大值
c = (int)max(a,b);
printf("%d,%d中的最大值是%d\n",a,b,c);
return 0;
}
案例3
#include <stdio.h>
/**
* 需求:函数案例-输入两个整数,要求用一个函数求出最大值,并在主调函数输出次数
*/
int max(int x,int y)
{
double z;
z = x > y ? x : y;
return (int)z;// 将double类型转换为int类型,此时会强制转换,如果为了增加代码的可读性,我们可以
手动强转。
}
int main(int argc,char *argv[])
{
int a,b,c;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
// 调用函数求最大值
c = max(a,b);
printf("%d,%d中的最大值是%d\n",a