打印
[应用方案]

C语言的函数

[复制链接]
986|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bestwell|  楼主 | 2024-8-13 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 函数的定义
函数定义的一般格式如下:
函数类型 函数名(形式参数表) [reentrant][interrupt m][using n]形式参数说明
{
局部变量定义函数体
}
前面部件称为函数的首部,后面称为函数的尾部,格式说明:

函数类型
函数类型说明了函数返回值的类型。
函数名
函数名是用户为自定义函数取的名字以便调用函数时使用。
形式参数表
形式参数表用于列录在主调函数与被调用函数之间进行数据传递的形式参数。
【例】定义一个返回两个整数的最大值的函数max()。
int        max(int        x,int        y)
{
int        z; z=x>y?x:y;
return(z);
}

reentrant 修饰符
这个修饰符用于把函数定义为可重入函数。所谓可重入函数就是允许被递归调用的函数。函数的递归调用是指当一个函数正被调用尚未返回时,又直接或间接调用函数本身。一般的函数不能做到这样,只有重入函数才允许递归调用。
关于重入函数,注意以下几点:
(1) 用 reentrant 修饰的重入函数被调用时,实参表内不允许使用 bit 类型的参数。函数体内也不允许存在任何关于位变量的操作,更不能返回 bit 类型的值。
(2) 编译时,系统为重入函数在内部或外部存储器中建立一个模拟堆栈区,称为重入栈。重入函数的局部变量及参数被放在重入栈中,使重入函数可以实现递归调用。
(3) 在参数的传递上,实际参数可以传递给间接调用的重入函数。无重入属性的间接调用函数不能包含调用参数,但是可以使用定义的全局变量来进行参数传递。
interrupt m 修饰符
interrupt m 是 C51 函数中非常重要的一个修饰符,这是因为中断函数必须通过它进行修饰。在 C51 程序设计中,当函数定义时用了 interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按 51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。
在该修饰符中,m 的取值为 0~31,对应的中断情况如下:
0——外部中断 0
1——定时/计数器 T0
2——外部中断 1
3——定时/计数器 T1
4——串行口中断
5——定时/计数器 T2其它值预留。
2. 函数的调用与声明
1. 函数的调用
函数调用的一般形式如下:
函数名(实参列表);
对于有参数的函数调用,若实参列表包含多个实参,则各个实参之间用逗号隔开。
按照函数调用在主调函数中出现的位置,函数调用方式有以下三种:

函数语句。把被调用函数作为主调用函数的一个语句。
函数表达式。函数被放在一个表达式中,以一个运算对象的方式出现。这时的被调用函数要求带有返回语句,以返回一个明确的数值参加表达式的运算。
函数参数。被调用函数作为另一个函数的参数。
2. 自定义函数的声明
在 C51 中,函数原型一般形式如下:
[extern] 函数类型 函数名(形式参数表);
函数的声明是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便调用函数时系统进行对照检查。函数的声明后面要加分号。
如果声明的函数在文件内部,则声明时不用 extern,如果声明的函数不在文件内部,而在另一个文件中,声明时须带 extern,指明使用的函数在另一个文件中。

七、构造数据类型
1. 数组
1. 一维数组
一维数组只有一个下标,定义的形式如下:
数据类型说明符 数组名[常量表达式][={初值,初值……}]各部分说明如下:

“数据类型说明符”说明了数组中各个元素存储的数据的类型。
“数组名”是整个数组的标识符,它的取名方法与变量的取名方法相同。
“常量表达式”,常量表达式要求取值要为整型常量,必须用方括号 “[]”括起来。用于说明该数组的长度,即该数组元素的个数。
“初值部分”用于给数组元素赋初值,这部分在数组定义时属于可选项。对数组元素赋值,可以在定义时赋值,也可以定义之后赋值。在定义时赋值,后面须带等号,初值须用花括号括起来,括号内的初值两两之间用逗号间隔,可以对数组的全部元素赋值,也可以只对部分元素赋值。初值为 0 的元素可以只用逗号占位而不写初值 0。
例如:下面是定义数组的两个例子。
unsigned        char x[5];
unsigned        int         y[3]={1,2,3};

第一句定义了一个无符号字符数组,数组名为 x,数组中的元素个数为 5。第二句定义了一个无符号整型数组,数组名为 y,数组中元素个数为 3,定义的同时给数组中的三个元素赋初值,赋初值分别为 1、2、3。
需要注意的是,C51 语言中数组的下标是从 0 开始的,因此上面第一句定义的 5 个元素分别是:x[0]、x[1]、x[2]、x[3]、x[4]。第二句定义的 3 个元素分别是:y[0]、y[1]、y[2]。赋值情况为:y[0]=1;y[1]=2;y[2]=3。
C51 规定在引用数组时,只能逐个引用数组中的各个元素,而不能一次引用整个数组。但如果是字符数组则可以一次引用整个数组。

2. 字符数组
用来存放字符数据的数组称为字符数组,它是 C 语言中常用的一种数组。字符数组中的每一个元素都用来存放一个字符,也可用字符数组来存放字符串。字符数组的定义下一般数组相同,只是在定义时把数据类型定义为 char 型。
例如:

char string1[10];
char string2[20];

上面定义了两个字符数组,分别定义了 10 个元素和 20 个元素。
在 C51 语言中,字符数组用于存放一组字符或字符串,字符串以“\0”作为结束符,只存放一般字符的字符数组的赋值与使用和一般的数组完全相同。对于存放字符串的字符数组。既可以对字符数组的元素逐个进行访问,也可以对整个数组按字符串的方式进行处理。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

1505

帖子

1

粉丝