浅谈C语言函数

时间:2022-09-21 03:28:25

浅谈C语言函数

摘要:本文主要讲述了C语言的定义、C语言的调用、函数的实际参数和函数的形式参数之间的关系以及函数调用过程,论述在C语言使用中函数调用的过程,讲明函数调用的实质就是由实参赋值给形参,不再区分传值调用和传址调用,有没有修改主调函数中变量内容主要在于有没有间接访问。

关键词:C语言 函数调用 间接访问

中图分类号:TP312 文献标识码:A 文章编号:1007-9416(2015)12-0000-00

C语言程序设计是结构化程序设计,函数是C语言的基本模块,函数调用是C语言运行的重要机制,在C语言中除了提供大量的库函数外,要实现具体的功能必须自己定义函数,定义出函数要实现的功能,使用函数的过程就是调用函数的过程,即函数间的接口,接口的实现是通过参数传递方式实现,函数调用的关键是正确传递实参值,用正确的形参变量来接收。

1 函数的定义

所谓函数定义,即定义函数功能,如求和,求最值,排序功能,用C语言提供的选择结构、循环结构写出具体的代码实现。如果函数只是完成某项特定的处理任务可以定义无返回值的函数,如果函数最后要返回结果,可以定义的返回值的函数,如下两段代码左边有返回值,右边没有返回值。

int sum1(int m)//函数头部

{ int i,sum=0;

for(i=1;i

sum=sum+i;

return sum; }

void sum2(int m)//函数头部

{ int i,sum=0;

for(i=1;i

sum=sum+i;

}

s=sum;

}

2 函数的调用

函数调用的一般形式为:

函数名(实参列表);

实参可以是常数、变量、表达式等,多个实参用逗号,分隔。

在C语言中,函数调用的方式有多种,例如:

01.// 函数作为表达式中的一项出现在表达式中

02.z = max(x, y);

03.m = n + max(x, y);

04.// 函数作为一个单独的语句

05.printf("%d", a);

06.scanf("%d", &b);

07.// 函数作为调用另一个函数时的实参

08.printf( "%d", max(x, y) );

09.total( max(x, y), min(m, n) );

在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参列表中各个参数是自左向右使用呢,还是自右向左使用。对此,各系统的规定不一定相同。

3 实际参数和形式参数

在函数定义时出现函数名后边括号里的变量就是形参,形参必须是变量,因为在函数调用时形参是被赋值对象,形参只在定义它的函数内部被访问,是局部变量。

在函数调用时出现在函数名后边括号里的常量、变量、表达式、函数等是实参,实参当前值是确定的,因为它在赋号右侧。

实参出现在主调函数中,形参出现在被调函数中。

4 传值调用和传址调用

4.1两个数对调的函数实现

#include

int a=3,b=4;

void swap1(int a,int b){//值传递,也称为单向传递

int t;

t=a;a=b;b=t;

}

void swap2(int *a,int *b){//地址传递,也称为“双向传递”,实质还是单向传递

int t;

t=*a;*a=*b;*b=t;

}

main(){

swap1(a,b);

printf("a=%d,b=%d\n",a,b);

swap2(&a,&b);

printf("a=%d,b=%d\n",a,b);

}

第一个输出结果为3,4,第二个输出结果为4,3,在这里传值调用和传址调用正确,多数教材和资料中谈到传址调用时介绍是双向传递,应该是不正确的,以下面例子为例:

4.2有下列程序

# include

void fun1(int x,int y)

{ int z;

z=x; x=y; y=z;

}

void fun2(int *x,int *y)

{ int z;

z=*x; *x=*y; *y=z;

(*x)++; (*y)++;

}

void fun3(int *x,int *y)

{ int z;

z=*x; *x=*y; *y=z;

(*x)++; (*y)++;

}

void main()

{ int a=5,b=9;

fun1(a,b);

printf("a=%d,b=%d\n",a,b);

fun2(&a,&b);

printf("a=%d,b=%d\n",a,b);

fun3(&a,&b);

printf("a=%d,b=%d\n",a,b);

}

在这个程序中有三次函数调用,第一次调用结果还第三次调用都没有改变主调函数中变量的值第二次改变了,第一次是传值调用,第二、三次是传址调用,第二次改变的实质不是因为是传址调用,而是因为使用了间接访问。

5 C语言程序设计函数使用方法

5.1函数是C模块语言的模块

C语言的基本框架是函数,函数是C语言的基本模块,在理解中列举生活中的例子,例如一个部门一开始很小,只有一个人,相当只有一个主函数,慢慢的部门壮大起来,需要的人数增多,这时候部门就可以再进一个人,那必然有一个领导另一个,领导者就是先来的人,也就是主函数,被领导者是后来的人,即被调用函数,主函数安排任务给被调函数,要把任务内容告诉被调用函数,这变是参数传递。

5.2函数代码定义过程

定义时先定义被调用函数,然后再定义主函数,这样在主函数中就不用做函数声明了。

定义被调用函数时,先把函数名字及圆括号和大括号写,里面的代码先不写。然后写主函数定义,主函数在这里没有返回值也无参,主函数的头部定义没有问题,然后先写主函数体代码,通常主函数分三部分, 输入、调用和输出,这三部分相对比较难的是调用,调用时要分析有没有返回值,有没有参数,如果有参数,有几个并且参数的类型要确定,调用时的参数是实际参数,根据实参和形参的一一对应关系,实参确定好了,形参的类型和个数自然也就确定了,这样被调用函数的头部就定义好了。

主函数定义后,被调用函数的头部也定义好了,这时候开始写被调用函数的函数体,也是编写程序最难的一部分,涉及具体的算法。

把主函数和被调用函数定义好后,在具体开发环境下编译、链接、执行,找出程序有没有语法错误和逻辑错误,最后程序得出正确的结果。

6 结语

C语言程序设计函数部分是学习难点,它把以前学的一个函数能实现的功能分在两个或多个函数中实现,并且多个函数这间有接口,接口就是函数调用时的参数传递,参数传递时又涉及到变量的作用域和生存期,函数部分把C语言的各个知识点都联接起来了,是C语言的集成和综合,所以学好函数是学好C语言的关键。

参考文献

[1] 谭浩强.C程序设计(第三版)[M].清华大学出版社,2005年.

[2] 郭继展.新编C语言程序设计[M].机械工业出版社,2003年6月.

[3] 乔欣.浅析C程序设计中指针使用的若干问题[J].电脑知识与技术,2003年32期.

上一篇:基于整合现有资源进行数字化校园建设的思考 下一篇:高校计算机机房管理问题浅析