(一).函数调用
1.传值调用:
将函数实参的值传给形参,但实参和形参分别占有不同的内存块,对形参进行修改不会影响实参。
2.传址调用:
(1)让执行体函数与外部变量建立联系
(2)函数内部可以直接操作外部的变量
(二)函数调用的练习:
1.判断一个数是否为素数,用函数来判断:
步骤一:为自己的函数取一个响亮的名字,比如判断素数就写成 is_prime。
步骤二:在函数中写上执行该功能的语句。代码如下:
int is_prime(int x)
{
int i = 0;
for(i = 2;i < x;i++)
{
if(x % i == 0)
{
return 0;//该函数的灵魂,当判断一个数可以被2整除就返回0,就不是素数。
break;
}
}
return 1;
}
上述代码中最重要的部分就是返回值,这在函数调用的时候很有用。一般都是先在主函数中确定需要执行体函数返回值的类型然后在确定执行体函数的类型和返回数值。
步骤三:调用
代码如下
#include<stdio.h>
int is_prime(int x)
{
int i = 0;
for (i = 2;i < x;i++)
{
if (x % i == 0)
{
return 0;//该函数的灵魂,当判断一个数可以被2整除就返回0,就不是素数。
break;
}
}
return 1;
}
int main()
{
int n;
scanf_s("%d", &n);
if (is_prime(n) == 1); //调用函数,当函数执行返回值为1就说明这个数是素数
printf("这个数是素数");
return 0;
}
(三)函数声明
一般当我们写简单的代码的时候都是从上往下写,那么自定义的执行体函数也就一般写在主函数的上面,所以在执行程序的时候就可以直接调用执行体函数。但是,当自定义的执行体函数在主函数后面的时候就需要声明该执行体函数。
1.声明举例如下(直接上代码,以上面的代码为例)
int main()
{
int n;
scanf_s("%d", &n);
int is_prime(int n); //简单的来说也就是在主函数中将执行体函数再写一边,注意先声明再调用
if (is_prime(n) == 1);
printf("这个数是素数");
return 0;
}
int is_prime(int x)
{
int i = 0;
for (i = 2;i < x;i++)
{
if (x % i == 0)
{
return 0;//该函数的灵魂,当判断一个数可以被2整除就返回0,就不是素数。
break;
}
}
return 1;
}
2.实际应用中的声明:
在实际应用中,一个复杂的程序一般都是一个团队来完成的,如果按照上述声明效率就会很低。所以是每个人负责一个模块,最后只需要一个人将其整合,在声明的时候也只需要引用头文件即可。
如下就是分模块,最后在day4_22.c中调用函数(例如一个人负责写一能完成两个变量相加的功能)
步骤一:在最后的文件中声明并调用所使用的Add函数,只能写为如下图所示,不能写为#include<Add.h>的样式。
步骤二:在头文件 add.h 中进行该函数的声明如下:
步骤三:在add.c中写该执行体函数如下
最后的执行结果如下图: