函数部分1

举报
周棋洛 发表于 2022/05/25 23:16:16 2022/05/25
【摘要】 前言 C的设计思想:把函数用作构建块。我们使用过标准库函数,如 printf() scanf()……现在我们进一步学习创建属于自己的函数模块。 文章目录 概念函数原型(函数声明)函数调用函数定...

前言

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


概念

1.什么是函数?
函数是完成特定任务独立程序代码单元

2.为什么要用函数呢?

  • 使用函数可以避免重复编写一样的代码的问题
  • 即使程序只用一次,也一样值得使用函数,函数让程序更加模块化,提高代码的可读性,更方便维护和完善

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

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

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

6.如何学习函数?

  • 函数声明
  • 函数定义
  • 函数调用
  • 建立函数间的通信

下面进入正题


函数原型(函数声明)

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

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

  
 
  • 1

也可以写成下面这样,可以省略变量名,但要注意分号不能丢,它标志者这是一条函数声明,放哪都可以。
一般来说,函数原型指明了函数的返回值类型和函数接受的参数类型,这些成为函数的签名,上面函数的签名是这个函数有两个整型参数,返回一个整型

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

int max(int,int);

  
 
  • 1

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

void ni();

  
 
  • 1

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

函数调用

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

max(4,5);

  
 
  • 1

执行过程:
1.当程序执行到max(4,5);时,会找到这个函数的定义并执行其中的代码
2.执行完毕,计算机返回主调函数继续执行下一行

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


函数定义

我们可以参考主调函数main

#include <stdio.h>
int main()
{

return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到main函数后没有分号,告诉编译器这是定义,而不是声明或原型
回到最大值的栗子,函数定义如下:

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编写带形参的函数

在这里插入图片描述
上面的就是呀,哈哈

#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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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


这里函数定义里的 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;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

形参实参

简单说,形式参数是被调函数中的变量,实际参数是主调函数赋给被调函数的具体值
实际参数可以是常量,变量甚至是更复杂的表达式
实际参数是出现在函数调用圆括号中的表达式
形式参数是函数定义的函数头中声明的变量
调用函数时,创建了声明为形式参数的变量并初始化为实际结果的求值问题


黑盒

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


在这里插入图片描述

文章来源: blog.csdn.net,作者:周棋洛ყ ᥱ ᥉,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/m0_53321320/article/details/118633908

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。