欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言程序设计学习笔记-- 函数介绍

程序员文章站 2022-06-24 20:47:32
C语言程序设计学习笔记-- 函数介绍。 7.1 为什么要用函数 ? 如果将所有代码都写在main函数中,使程序变得庞杂不清。 ? 函数就是功能,没一个函数用来实现一个特定的功...

C语言程序设计学习笔记-- 函数介绍。

7.1 为什么要用函数

? 如果将所有代码都写在main函数中,使程序变得庞杂不清。

? 函数就是功能,没一个函数用来实现一个特定的功能,函数的名字反映其代表的功能。

个人理解:类比数学中的 F(x) 函数 ,将变量参数x,y带入公式中进行运算实现其运算功能

示例:

//函数

#include

void printf_start() //void 无类型,无函数值,执行该函数后不会把值带回main函数

{

printf ("**********\n");

}

void printf_word()

{

printf("how areyou\n");

}

int main()

{

void printf_start();

void printf_word();

void printf_start();

printf_start();

printf_word();

printf_start();

getchar();

return 0;

}

说明:

(1)源文件程序由一个或多个函数以及指令,数据声明,定义等组成。一个源文件是一个编译单位,在程序编译时以原件问为单位进行编译而不是以函数为单位进行编译。

(2)C程序的执行从main函数开始

(3)函数可以互相调用但是不能嵌套定义。Main函数不能被调用,main函数是被操作系统调用的。

从用户角度分析,函数分为

? 库函数 由系统提供,,用户不必定义

? 自定义函数,解决用户专门需要的函数

(4)从函数的形式看,函数分为

? 无参函数,在调用无参函数时主函数不传递参数

? 有参函数,main函数调用时,通过参数向被调用函数传递数据。

7.2函数的定义带入进行运算

1.定义函数: 函数必须 “先定义后使用”

定义函数应包括以下内容:

? 函数名

? 函数类型,即函数返回值类型c.函数的参数名和类型 d.函数功能

2.定义函数的方法

? 定义无参函数

类型名 函数名() 类型名 函数名(void)

{ {

函数体 函数体

} } void表示“空”,即没有参数

? 定义有参函数

类型名 函数名 (形参参数表列) int max(intx,inty)

{ {

函数体 int z;

z=x>y?x:y;

printf("the number z is %d\n",z);

return z;//将z的值作为函数返回值带回主函数

} }

? 定义空函数

类型名 函数名() void max()

{ } { }

空函数占一个位置,还未编写好,可以后期扩充

7.3调用函数

1.函数调用的形式

函数名(实参表) //如果调用无参函数,括号不可省略

(1)函数调用语句 printf_start();

(2)函数表达式 z=2*max(a,b)

(3)函数参数 m=max(a,max(a,b)) 函数调用的值作为另一调用的实参

2.函数调用的数据传递

(1)形式参数和实际参数

? 形式参数:定义时,括号中的变量名

? 实际参数:调用时,括号中的参数(可以是常量,变量或者表达式)

在函数调用的过程中,形参从实参中得到一个值,在调用期间有效,参加函数中的运算。

(2)函数调用的过程

? 在定义形参时,不占内存中的存储单元,在调用时,临时分配内存单元

? return语句把函数返回值带回main函数。 返回值类型与函数类型一致

? 调用结束,形参被释放,实参仍保留并维持原值。单向传递,只能由实参传递给形参。

(3)函数的返回值

a.函数返回值是通过return语句获得

max(int x,int y)

{

return(x>y?x:y);

}

b.函数类型决定返回值类型

c.如果函数返回值类型与指定函数类型不同,按照复制规则处理

7.4被调用函数的声明和函数原型

2.函数原型

(1) 函数类型 函数名(参数类型1 参数名1,参数类型2 参数名··········)

(2) 函数类型 函数名(参数类型1,参数类型2· ·······) 不提倡

7.5函数的嵌套使用

函数不可以嵌套定义但是可以嵌套调用。

7.6函数的递归调用

7.7数组作为函数参数

(1)数组元素可以作为实参,不能作为形参。

原因:形参是在函数被调用时临时分配存储单元,不可能为一个数组元素单独分配存储 单元 ,数组是一个整体,在内存中占连续的一段存储单元。

(2) 数组名作为函数参数

? 用数组元素作为实参时,向形参变量传递的是数组元素的值

? 用数组名作为函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址。

7.8.局部变量和全局变量

局部变量:函数内定义的变量,复合语句内定义的变量只在语句范围内有效。

全局变量:函数外定义的变量,有效范围是从定义变量位置到本源文件结束。

7.9变量的存储方式和生存期

7.10 关于变量的声明和定义

(1)区别:

需要建立存储空间——定义

不需要建立存储空间——声明

(2)具体

在C语言深度剖析中,关于变量的定义和声明有详细解释,在此说一下我对定义和声明的区分:

例如 :Inti ;

extern int i;

1. 定义 :

就是对一个创建的对象,为它起好名字然后为它分配好一个属于他的内存空间。 并且一个对象在一个区域内只能被定义一次,不能定义多次。

2.声明 就是创建一个对象,

a.提前为它匹配一个内存空间,就相当于预定。我不一定现在就要使用,但是这个东西是我的,你别人不能用。

b.提前声明,但是不用,可以在后面需要用的时候再定义。

所以声明和定义的区别就是,定义已经分配了内存空间,而声明只是提前预定但是没有分配,等到需要用的时候再定义分配就好了。

7.11内部函数和外部函数

1.内部函数:

一个函数只能被本文件中的其他函数所调用,称为内部函数。

Static 类型名称函数名 (形参表);

例如:

static int fun1 (int a,int b);

表示fun1是一个内部函数,不能被其他文件调用。

内部函数也可以成为静态函数,因为它使用static声明的。

作用:不同文件中有同名的内部函数,不会互相干扰,使它对外界屏蔽。

2.外部函数:

一个函数可以供其他它文件使用,成为外部函数

例如:Extern int fun(int a,int b);

C语言规定,定义时候extern省略,默认为外部函数。