当前位置:文档之家› 第五讲C语言函数

第五讲C语言函数

第五讲C语言函数
第五讲C语言函数

第5讲函数5.1函数的概念

C程序由一个main和任意个函数组成。

例1 在主函数中调用其他函数。

#include

void printstar(void)

{

puts("**********************\n");

}

void print_message(void)

{

puts(" Welcome to C!\n");

}

main()

{

printstar();

print_message();

printstar();

return 0;

}

程序运行后输出:

**********************

Welcome to C!

**********************

3)函数不可嵌套定义,具有全局性、平行性,

4)函数分为有参与无参函数

5)程序从main开始执行,最后又回到main函数结束。

5.1.5 定义函数的一般形式

1. 定义无参数的一般形式

类型标识符函数名([void])

{

声明部分

语句

}

调用方式

函数名( ) ;

若有返回值可出现在表达式中,无返值可单独出现

2. 定义有参数的一般形式

函数的定义通常包含以下内容:

函数返回值类型函数名(形参表说明)//函数首部,函数头{

声明语句//函数体

执行语句

}

说明:

(1)函数的类型,是指函数返回值的类型。当不指明函数类型时,系统默认的是int型。

(2)函数名本身也有值,它代表了该函数的入口地址,使用指针调用该函数时,将用到此功能。

(3)形参全称为"形式参数"。形参表是用逗号分隔的一组变量说明(即定义),包括形参的类型和形参标识符,其作用是指出每一个形参的类型和形参的名称,当调用函数时,接受来自主调函数的数据,确定各参数的值。如:

int func (int x, int y )

{ …… }。

(4)用{ }括起来的部分是函数的主体,称为函数体。我们可以得到一个C语言中最简单的函数:

void dumy ( ){ }

5.2 函数参数和函数的值

C语言中采用参数、返回值和全局变量三种方式进行数据传递。

◆当调用函数时,通过函数的参数,主调函数为形参提供数据;

◆调用结束时,被调函数通过返回语句将函数的运行结果(称为返回值)带回主调函数中;

◆函数之间还可以通过使用全局变量,在一个函数内使用其他函数中的某些变量的结果。

1. 形式参数和实际参数

形式参数(形参)——是函数定义时由用户定义的形式上的变量。实际参数(实参)——是函数调用时,主调函数为被调函数提供的原始数据。

若实参和形参均为普通变量,则实参向形参传送数据的方式是"按值传递"。等价于:

◇形式参数是函数的局部变量,仅在函数内部才有意义,不能用它来传递函数的结果。

例:调用函数的数据传递。

#include

int max ( int x, int y ) //x和y为形参,接受来自主调函数的原始数据

{

int z;

z=x>y?x:y;

return(z); //将函数的结果返回主调函数

}

main()

{

int a,b, c;

puts("please enter two integer numbers");

scanf("%d %d",&a,&b);

c=max(a,b);//主函数内调用功能函数max,实参为a和b printf("max=%d\n",c);

return 0;

}

说明:实参与形参必须类型相同,个数相等,一一对应。当调用函数时,实参的值传给形参,在被调函数内部,形参的变化不会影响实参的值。

当实参之间有联系时,实参的求值顺序在不同的编译系统下是不同的,VC是从右向左。

#include

int add(int x,int y);

main()

{

int x=2;

printf("%d\n",add(x,++x));

return 0;

}

int add(int x,int y)

{

return (x+y);

}

运行结果:

6

若在主函数中变量a=5,b=10,编写一个函数交换主函数中两个变量的值,使变量a=10,b=5。

#include

void swapf(int x,int y);

main()

{

int a, b;

a=5; b=10; //说明两个变量并赋初值

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

swapf(a, b); //用变量a和b作为实际参数调用函数

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

return 0;

}

void swapf(int x,int y)

{

int temp; //借助临时变量交换两个形参变量x和y的值temp=x; //①

x=y; //②

y=temp; //③

printf("in swapf x=%d y=%d\n",x,y);

}

程序的实际运行结果为:before swapf a=5, b=10 in swap

f x=10, y=5

after swapf a=5, b=10。

函数的参数可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

例:同上例。今用函数处理,而且用指针类型的数据作函数参数。

#include

void swapf(int * p1,int * p2);

main()

{

int a, b;

a=5; b=10; //说明两个变量并赋初值

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

swapf( &a, &b); //用变量a和b作为实际参数调用函数printf("after swapf a=%d b=%d\n",a,b);

return 0;

}

void swapf(int * p1,int * p2)

{

int temp; //借助临时变量交换两个形参变量x和y的值temp=*p1; //①

*p1=*p2; //②

*p2=temp; //③

printf("in swapf *p1=%d *p2=%d\n",*p1,*p2);

}

运行程序:

before swapf a=5 b=10

in swapf *p1=10 *p2=5

after swapf a=10 b=5

所以可以通过指针作为函数的参数,实现在函数体中,对实参指针变量所指向的变量的操作。

实参指针变量的作用仅是在调用函数时,为定义的形参指针变量赋初值:

数据类型符 * 形参指针变量名=实参指针变量名;

例:输入a、b、c三个整数,按大小顺序输出。

#include

void swap(int *pt1,int *pt2) //交换两变量的值

{

int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

}

void exchange(int *q1,int *q2,int *q3)//三变量排序

{

if(*q1<*q2)swap(q1,q2);

if(*q1<*q3)swap(q1,q3);

if(*q2<*q3)swap(q2,q3);

}

int main()

{

int a,b,c,*p1,*p2,*p3;

puts("Input 3 numbers:"); scanf("%d %d %d",&a,&b,&c); p1=&a;p2=&b; p3=&c; exchange(p1,p2,p3);

printf("%d %d %d\n",a,b,c); return 0;

}

运行程序:

10 -23 43 //输入的三个数据

43 10 -23

5.2.2 函数的返回值

1.函数的返回语句

格式:

return 表达式;

或:

return(表达式);

功能:将表达式的值带回主调函数

相关主题
文本预览
相关文档 最新文档