函数部分1

简介: C的设计思想:把函数用作构建块。我们使用过标准库函数,如 printf() scanf()……现在我们进一步学习创建属于自己的函数模块。

文章目录


概念


函数原型(函数声明)


函数调用


函数定义


编写带形参的函数


黑盒


概念


1.什么是函数?


函数是完成特定任务的独立程序代码单元


2.为什么要用函数呢?


使用函数可以避免重复编写一样的代码的问题


即使程序只用一次,也一样值得使用函数,函数让程序更加模块化,提高代码的可读性,更方便维护和完善


3.描述性的函数名能清楚地表达函数的用途和组织结构(函数名尽量做到见名知意)


4.函数黑盒,给参数完成特定功能,(输入输出),如果不是我们编写的函数,根本不用去关心黑盒里发生了什么


5.在写代码之前,我们应仔细思考函数的任务,以及函数和程序整体的关系


6.如何学习函数?


函数声明


函数定义


函数调用


建立函数间的通信


下面进入正题


函数原型(函数声明)


函数原型告诉编译器函数的类型,函数和变量一样,有多种类型,任何程序在使用函数之前都要声明该函数的类型,比如下面的函数声明,看名字大概是比较两个整数的哪个大的


int max(int a,int b); //函数原型(声明)


也可以写成下面这样,可以省略变量名,但要注意分号不能丢,它标志者这是一条函数声明,放哪都可以。


一般来说,函数原型指明了函数的返回值类型和函数接受的参数类型,这些成为函数的签名,上面函数的签名是这个函数有两个整型参数,返回一个整型


在原型中使用变量名并没有实际创建变量


int max(int,int);


ANSI C也接受过去的函数声明形式,无参数列表


void ni();


这种形式最终会被淘汰,了解了解,知道也是没问题的就OK,不建议使用


函数调用


表明在此处使用此函数,像下面的函数调用就是比较4和5中的最大值


max(4,5);


执行过程:


1.当程序执行到max(4,5);时,会找到这个函数的定义并执行其中的代码

2.执行完毕,计算机返回主调函数继续执行下一行


准确的讲,函数调用的过程是编译器把C程序翻译成机器语言代码


函数定义


我们可以参考主调函数main


#include <stdio.h>
int main()
{
return 0;
}


可以看到main函数后没有分号,告诉编译器这是定义,而不是声明或原型

回到最大值的栗子,函数定义如下:


int max(int a,int b)
{
    if(a>b)
    printf("%d",a);
    else
    printf("%d",b);
}


编写带形参的函数



上面的就是呀,哈哈


#include<stdio.h>
//函数定义
int max(int a,int b)
{
    if(a>b)
    printf("%d",a);
    else
    printf("%d",b);
}
//闷函数,程序的入口
int main()
{
    //函数调用
    max(5,89);
//主函数的结束
return 0;
}
//灰色的函数声明
//int max(int a,int b);


我们看到我把函数的声明给注释掉了,把函数的定义放在了最前面,神经质。。。。。可能,大概,额,我只是想说这样写是完全没问题的哦,跑题了,大连,继续说一下带参函数


这里函数定义里的 int a,int b属于局部变量,属于该函数私有,可以和程序里其他的变量重名,这不会引起冲突,它们是重名的不同变量


再来看一眼函数声明的两个参数int max(int a,int b);这俩变量成为形式参数,小名形参形参也是局部变量,属于函数私有。


ANSI C要求使用每个变量前,要声明其类型


int max(int a,int b); //无效的函数头
int max(int a,b);  //无用的函数头
***********************88888*********************
//有效(但不建议使用,将要淘汰,了解)
void dou(x,y,z);
int x,y,z;


形参实参



简单说,形式参数是被调函数中的变量,实际参数是主调函数赋给被调函数的具体值


实际参数可以是常量,变量甚至是更复杂的表达式


实际参数是出现在函数调用圆括号中的表达式


形式参数是函数定义的函数头中声明的变量


调用函数时,创建了声明为形式参数的变量并初始化为实际结果的求值问题


黑盒


黑盒方法的核心:函数中的变量属于私有,霸道,吼吼,我喜欢,如果在闷函数中使用一样的变量名,那么它们是不影响的,相互独立的,函数黑盒发生了什么对主调函数是不可见的




相关文章
|
10天前
|
监控 算法 Java
CollectGarbage函数详解
CollectGarbage函数详解
|
2月前
|
存储 编译器 Serverless
C++系列十:函数
C++系列十:函数
|
11月前
|
C语言
C语言知识点之 函数2
C语言知识点之 函数2
35 0
|
7月前
|
存储 程序员 C语言
函数(1)
函数(1)
57 0
|
7月前
|
人工智能
函数练习
用菜单的形式分别选择百钱买百鸡,九九表,水仙花数。
34 0
|
11月前
|
算法 程序员 信息无障碍
从零带你认识函数(二)
从零带你认识函数
69 1
|
12月前
|
算法 编译器
函数(2)
函数(2)
|
算法 编译器 API
8.函数
8.函数
58 0
|
编译器
【C++Primer】第6章:函数
【C++Primer】第6章:函数
【C++Primer】第6章:函数