📑文章目录:
目录
?1.4.2🔥没有参数但有返回值的函数? ? ? ? ? ? ? ?
? ? 函数是执行特定任务的代码块。
? ? 假设您需要创建程序来创建一个圆并为其着色。您可以创建两个函数来解决此问题:
? ??创建一个圆的函数
? ?? 创建颜色的函数
? ? ?将复杂的问题分成较小的块可以使我们的程序易于理解和重用。
C函数具有以下优点。
通过使用函数,我们可以避免在程序中一次又一次地重写相同的逻辑/代码。
我们可以在程序中以及在程序的任何位置多次调用C函数。
当大型C程序被划分为多个函数时,我们可以轻松地对其进行跟踪。
可重用性是C函数的主要成就。
但是,函数调用始终是C程序的开销。
? ? ? ?函数的组成:? ?
ret_type fun_name(para1, * )
{
statement;//函数体
}
ret_type 返回类型
fun_name 函数名
para1 ? ?函数参数
ret_type:?是用来表示函数计算结果的类型,函数可能会也可能不会有从该函数返回值。如果您不必从函数返回任何值,则将void用作返回类型,表示什么都不返回。
fun_name:是为了方便使用函数;就像人的名字一样,有了名字方便称呼,函数有了名字方便调用,所以函数名尽量根据函数的功能起有意义的名字。
函数的参数就相当于工厂送进去的原材料,函数的参数也可以是void,明确表示函数没有参数,如果有参数,要交代清楚函数的类型和名字,以及参数的个数。
? ? ? ? ??
void print()
{
printf("hello world");
}
如果要从函数返回任何值,则需要使用任何数据类型,例如int,long,char等。返回类型取决于要从函数返回的值。
让我们看一个简单的C函数示例,该函数从该函数返回int值。
int get()
{
return 10;
}
在上面的示例中,我们必须返回10作为值,因此返回类型为int。如果要返回浮点值(例如10.2、3.1、54.5等),则需要使用float作为方法的返回类型。
示例:
float get()
{
return 10.2;
}
函数可以接受也可以不接受任何参数。它可能会或可能不会返回任何值。基于这些事实,函数调用有四个不同方面。
没有参数且没有返回值的函数
没有参数但有返回值的函数
有参数且无返回值的函数
带有参数和返回值的函数
? ? ? ? ? ? ? ? ?
实例1
void print(void)//不写void的话,调用时可以传参也可以不传
{
printf("hehe\n");
}
int main()
{
print();
printf(1)//没有void的话,这句话也可以打印hehe,有void的话,语法错误
return 0;
}
实例2
void sum()
{
int a, b;
printf("\n输入两个数字\n");
scanf("%d,%d", &a, &b);
printf("总和是 %d", a + b);
}
void main()
{
printf("\n计算两个数字和");
sum();
}
int sum()
{
int a,b;
printf("\n输入两个数字");
scanf("%d %d",&a,&b);
return a+b;
}
void main()
{
int result;
printf("\n计算两个数的和:");
result = sum();
printf("%d",result);
}
实例1:
void sum(int a, int b)
{
printf("\n总和是 %d",a+b);
}
void main()
{
int a,b;
printf("\n计算两个数的和:");
printf("\n输入两个数字:");
scanf("%d %d",&a,&b);
sum(a,b);
}
实例2:
void average(int a, int b, int c, int d, int e)
{
float avg;
avg = (a+b+c+d+e)/5;
printf("给定五个数字的平均值 : %f",avg);
}
void main()
{
int a,b,c,d,e;
printf("\n要计算五个数的平均值:");
printf("\n输入五个数字:");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
average(a,b,c,d,e);
}
实例1:
int sum(int a, int b)
{
return a+b;
}
void main()
{
int a,b,result;
printf("\n计算两个数的和:");
printf("\n输入两个数字:");
scanf("%d %d",&a,&b);
result = sum(a,b);
printf("\n总和是 : %d",result);
}
实例2:检查数字是偶数还是奇数的程序
int even_odd(int n)
{
if(n%2 == 0)
{
return 1;
}
else
{
return 0;
}
}
void main()
{
int n,flag=0;
printf("\n检查一个数字是偶数还是奇数");
printf("\n输入数字: ");
scanf("%d",&n);
flag = even_odd(n);
if(flag == 0)
{
printf("\n数字是奇数");
}
else
{
printf("\n这个数是偶数");
}
}
1.return后面可以是一个数值,也可以是一个表达式,如果是表达式,优先执行表达式,
2.return后面也可以什么都没有,直接写return,这种写法适合函数返回类型是void的情况
3.return返回的值和函数返回的类型不一致,系统会自动将返回的值隐式转换为函数的返回类型。
4.return语句执行后,函数就彻底返回,后边的代码不在执行
5.如果函数中存在if等分支语句,则要保证每种情况都有return返回,否则会出现编译错误
void swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
int main( int argc, char *argv[] )
{
int a = 5;
int b = 10;
swap(a, b); //调用交换函数
printf("交换结果为 a = %d, b = %d\n",a,b);
return 0;
}
由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变a和b原有的值。
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main( int argc, char *argv[] )
{
int a = 5;
int b = 10;
swap(&a, &b); //调用交换函数
printf("交换结果为 a = %d, b = %d\n",a,b);
return 0;
}
指针传递过程中,将a和b的地址分别传递给了x和y,在函数体内部改变了a、b所在地址的值,即交换了a、b的数值。
void swap(int &x, int &y)
{
int temp;
temp = x;
x = y;
y = temp;
}
int main( int argc, char *argv[] )
{
int a = 5;
int b = 10;
swap(a, b); //调用交换函数
printf("交换结果为 a = %d, b = %d\n",a,b);
return 0;
}
引用传递中,在调用swap(a, b);时函数会用a、b分别代替x、y,即x、y分别引用了a、b变量,这样函数体中实际参与运算的其实就是实参a、b本身,因此也能达到交换数值的目的。
注:严格来说,C语言中是没有引用传递,这是C++中语言特性,因此在.c文件中使用引用传递会导致程序编译出错。