成都网站建设设计

将想法与焦点和您一起共享

C语言:函数(上)-创新互联

1.自定义函数

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都做网站、巴楚网络推广、微信平台小程序开发、巴楚网络营销、巴楚企业策划、巴楚品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供巴楚建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

在数学当中,我们学过很多函数,如 三角函数 y  = sin x,二次函数 y = f(x)...它们都有一个共同特点,即有参数 x , 和经过函数 f(x) 运算(处理)后的返回值 y,那么在C语言中的函数该如何编写呢?

事实上,C语言的函数编写也遵循这样一个规律,即函数包含它的参数,并且最多有且仅有一个函数的返回值,具体定义一个函数的操作就是:

返回值类型 函数名(参数1,参数2,参数3,...)

{

函数体语句1;

函数体语句2;

......

return 表达式(返回值)
} 注意:函数的定义结尾没有分号。

这里,函数的返回值类型可以是我们知道的各种数据类型,例如int,char,float,double,long long等等,这些都是C语言自带的数据类型,当然,还有一个比较特殊的类型 void 它的意思是函数的返回值类型为 “空” ,即函数可以返回一个空类型,或者干脆没有返回值。

例如:编写一个求取大值的函数,经过分析可知,我们要通过函数获得一个大值,因此需要函数有一个返回值,所以函数返回值类型不能为空(void),这里我们默认要返回一个整型的大值,定义是这样的:

int max(int a,int b)

{

if(a >b) return a;

return b;
}

这样我们就实现了两个整数求取大值的过程,这里有几个点还需指明,例如,我们的函数只有两个参数,那如果我们要求三个数的大值或者四个数的大值甚至是五个,六个等等,那我们是不是需要在函数的参数列表里再多定义几个 int c,int d,int e...呢?想了想那么复杂,所以显然是不用的,为什么不用,这个问题留在后期解答。还有一点,就是关于这个函数体中的语句,我们看到函数体里面只有一个 if 判断语句,而没有出现它的难兄难弟 else ,为什莫?其实关键就在于 return 语句,return 语句在函数体中是老大哥一样的存在,为什莫这么说呢,因为一旦函数执行到return语句,函数就退出了,所以,在本函数体中,如果a >b 条件满足,返回a,否则编译器就不会执行return a 这条语句,顺序往下执行,遇到return b,返回b的值,函数执行完毕。但其实在return b,前面加上else 也是可以的,这里只是手懒而已。

提示:函数的参数和返回值类型最好是我们 “常见的数据类型” ,如int ,char double,当然,后期认识了指针,结构体,类等数据类型也可以作为函数的参数和返回值,只不过它们的作为参数和返回值要相对复杂些,如果函数不要返回值,则返回值类型应该写为 void ,而不是空着返回值类型,直接写函数名。

2.自定义函数的几种类型

1 返回值类型 函数名(参数...){      }    有返回值 有参数

2 返回值类型 函数名(          ){      }    有返回值 无参数

3 void 函数名 (参数...)          {      }    无返回值 有参数

4 void 函数名 (          )          {      }    无返回值 无参数

3.函数的声明

当我们定义了一个函数,要去使用这个函数的时候,就需要对函数进行调用,但有些情况下,即使我们已经已经在程序定义了这个函数,但当我们去使用它的时候,程序有时会报错说[Error] '函数名' was not declared in this scope,这个时候,往往是我们把函数定义在了主函数的后面,当程序执行到主函数里面的语句时,程序不知道后面还有一个我们事先定义好的函数,这时候,就用到了函数声明,具体声明形式时这样的:返回值类型 函数名 (参数);将对应代码声明语句像这样在主函数中放在要调用该函数语句的前面,程序遇到该声明语句就会在程序中寻找相关的函数定义,这样一来,函数就可以在主函数中正常使用了。当然,有没有一种方法可以让我们省略函数的声明语句呢?答案是可以的,我们只需要将函数的定义放在主函数前面就可以在主函数中不用声明也可以直接调用了。

4.函数的参数传递

当我们要使用一个带有参数的自定义函数时,我们必须传递给函数的形式参数一个实参,在上例

int max (int a,int b){  函数体} 类型中,a , b就是形式参数,当我们调用这个函数时,需要传递给函数两个实际参数,多一个少一个都不行,比如我们有两个变量 num1 = 10,num2 = 1;要对比两个数的大小,就需要在程序中有这样的语句:int c = max(num1,num2); c 用来接收num1,num2两个数中的较大值,在这个过程当中 num1的值传递给了 a ,num2 的值传递给了 b,这种参数之间的传递,就叫做参数的值传递,函数参数的传递类型有三种,值传递,地址传递,引用传递,其中值传递只是简单的将实际参数的值复制给了形式参数,这种参数之间值传递的方式中,形式参数和实际参数之间互不影响,即如果形式参数的函数值在函数体当中有所改变,不会影响到主函数中的实际参数。

例如:现在我们需要编写一个函数来实现两个变量之间的值交换。

#include

void swap(int a,int b)

{

int t = a;

a = b;

b = t;

}

int main()

{

int a = 3,b = 4;

swap(a,b);

printf("a = %d\nb = %d ",a,b);

}

可以看到,在我们事先定义的swap()函数中,我们将传进来的变量a 和 b 的值借助 t 变量进行了交换,但当我们运行这段代码后会发现,主函数中打印的 a 和 b 的值依然是 3 和 4,这就是所谓的参数之间进行了值传递,形式参数的改变不会影响主函数当中的实际参数的值。那么怎么修改才能实现两个实际参数之间的值交换呢,感兴趣的同学可以去了解一下C语言指针部分的讲解,由于我这里仅针对部分学基础的同学,所以这里我只给出代码,不做过多解释。

#includevoid swap(int * a,int * b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
int main()
{
    int a = 3,b = 4;

    swap(&a,&b);

    printf("a = %d\nb = %d",a,b);
    
    return 0;
}
​

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:C语言:函数(上)-创新互联
标题路径:http://chengdu.cdxwcx.cn/article/deidcc.html