函数

一、函数原型声明


1.目的

    说明函数类型和参数情况,以保证程序编译时能判断对该函数的调用是否正确。

2.一般格式

    函数类型 函数名(参数表);

3.说明

    ①函数声明是一条c语句,与函数定义时的函数首部不同,函数声明后必须加分号。

    ②当主调函数放在被调函数后面时,不需要做声明。


二、函数的调用


1.前提条件

        调用自定义函数时,程序中必须要有与调用函数相对应的函数定义。

2.调用过程

        任何C程序执行,首先从主函数main()开始,若遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后将返回主函数,然后再从原先暂停的位置继续执行。(主调函数:调用其它函数的函数;被调函数:被调用的函数。)

3.调用形式

函数名(实际参数名)

实际参数名:即实参,主调函数的参数。

说明: 即使没有实际参数也要写小括号。

4.调用方式

5.参数传递

    程序运行遇到函数调用时,实参的值依次传递给形参;参数的传递是单向的,形参的值即使改变了,也不会反过来影响实参。

实参和形参的比较:

    ①实参是主调函数的,形参是自定义函数的;两者可以同名也可以不同名。

    ②形参和实参一一对应,数量应相同,顺序应该一致。

    ③形参必须是变量;实参可以是变量、常量或表达式。

6.函数结果的返回

⑴一般形式

    return 表达式;

⑵return的作用

    ①结束函数的运行;②带着运算结果(表达式的值)返回主函数。(return只能返回一个值)

⑶说明

  ① 先求表达式的值再返回。一般情况下,表达式的类型与函数类型应该一致,若不一致,以函数类型为准。②可以有多个return。③若没有return,也碰到最后的大括号自动返回,但是不会把值传给主函数。


三、函数的定义

1.定义

    函数就是一个完成特定工作的独立程序模块。

2.分类

    分为库函数和自定义函数。

3.一般格式

    函数类型  函数名(形式参数表)/*函数首部*/

    {  函数实现过程  /*函数体*/  }

⑴函数首部:

①构成:ⅰ函数类型:函数结果返回的类型,一般与return语句中表达式的类型一致。

                ⅱ函数名:函数整体的称谓,用合法标识符表示。

                ⅲ形参表:给出了函数计算所要用到的相关已知条件,以类似变量的形式给出(格式是类型1 形参1,类型2 形参2)。每个形参(形参:函数定义时,位于其首部的参数,用于接收参数传来的值。)前面的类型必须标明。函数的形参可以是一个或多个,也可以没有。

  ② 注意事项:ⅰ函数首部后面不可加分号;ⅱ只有必须从主函数中得到的已知条件,才能定义成形参;

⑵函数体

        体现函数的实现过程,有一对大括号内的若干语句组成,用一完成特定的工作,并用return语句返回运算结果。


四、不返回结果的函数


1.格式

viod 函数名(形参表)            /*函数首部*/

{    函数实现过程                          /*函数体*/  }

2.说明

    ①函数体中return可以省略;

    ②在函数定义时void不可省略,否则默认为int类型;

    ③不可能出现在表达式中,通常以独立的调用方式体现;

3.作用

    简化主函数结构。


五、局部变量和全局变量


1.局部变量

⑴定义

    C语言中把定义在函数内部的变量(或复合语句中的变量)称之为局部变量。

⑵作用

    避免各个函数之间的变量的相互干扰,在结构化程序设计中作用显著。

⑶位置

    一般定义在函数(或复合语句)的开始处,标准C规定不能定义在中间位置。

⑷说明

    ①局部变量的有效作用范围只局限于所在函数的内部;

    ②形参是局部变量。

2.全局变量

⑴定义

    在函数外而不属于任何函数的变量称为全局变量。

⑵作用

    解决了多个函数间的变量共用;解决函数多结果返回的问题。作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有函数起作用。

⑶位置

  既可定义在程序头部,又可定义在两个函数中间或程序尾部, 一般情况下定义在程序的最前面,即第一个函数前。

⑷说明

全局变量更多的用于多函数间的全局数据表示。

3.二者之间的联系

    ①允许二者同名;

    ②二者同名时,在该函数中的全局变量不起作用,而由局部变量起作用;对其他不存在同名变量的函数,全局变量仍起作用。

    ③全局变量与复合语句中的局部变量同名时,以复合语句为准。

    ④虽然全局变量很好,但我们应更宠爱局部变量和函数参数。


六、变量生存周期和静态局部变量


1.自动变量

⑴定义

        把局部变量成为自动变量,即函数被调用时,系统自动为其分配储存单元,而一旦该函数调用结束(不一定是整个程序运行结束),所有分配给自动变量的单元将回收。

⑵格式

auto 类型名 变量表;

⑶说明

    ①在定义自动变量时,auto可以省略。

    ②当main()函数中,由于main()未运行结束,局部变量仍然存在,还在生存周期中。(变量生存周期,即变量从定义开始分配储存单元,到运行结束储存单元被回收的整个过程。)但由于变量的作用范围,使得main()中的局部变量单元不能在其他函数中使用。只有回到主函数中,那些局部变量才可继续使用。

2.变量储存的内存分布

⑴分类

    分为静态储存区和动态储存区(使用堆栈来管理)。

3.静态局部变量

⑴定义

        放在静态储存区,不会向局部变量那样被系统回收,生存周期会持续到程序结束。一旦静态局部变量的函数被再次调用,静态局部变量就会被激活。

⑵格式

static 类型名 变量表

⑶说明

    ①静态变量赋初值只在函数第一次调用时起作用,若定义时没有赋初值,系统将自动赋0;

    ②受变量作用范围限制,不能作用其他函数(包括主函数)。

⑷静态变量与全局变量

    ①共同点是生存周期都是贯穿整个程序;

    ②区别在于作用范围不同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,564评论 0 5
  • 1、c语言的函数有以下特点: (1)才源程序由函数组成,一个主函数main()+若干其他函数 C程序中的函数类似文...
    滕王阁序阅读 1,342评论 0 6
  • C语言函数(一) 谨记 短暂的人生中,注定有很多人陪伴着你度过,陪你一起欢呼,陪你一起伤心流泪,陪你一起走过一条又...
    长风留言阅读 2,267评论 1 7
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,610评论 1 19
  • 类似“畅言”、“多说”的评论功能css 数据库存储结构 ajax回复功能 ajax评论
    3feeb4458361阅读 200评论 0 0