(本文为博闻网版权所有,转载必须注明出处。)

大多数编程语言都支持定义某种形式的函数。使用函数可以将一个大程序分解为小的代码块并分别命名,然后这些命名的代码块就可以在整个程序中重复使用了。函数输入参数并返回一个结果。C函数可以输入的参数个数没有限制。一般来说,对于编译器而言,只要在调用函数以前事先声明函数名称,则各函数在程序中的顺序并不重要。

我们已经讨论过一些有关函数的内容了。前面遇到的rand函数几乎是最简单的函数了。它不接受参数并返回一个整数:

int rand()
/* 摘自 K&R
- 生成一个0-32767之间的随机数字。*/
{
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}

int rand()这些程序定义了rand函数,还指明rand没有输入参数并返回一个整数。此函数没有局部变量,但如果需要的话,局部变量会紧接着打开的{开始。(C 允许您在任何 { 后面声明变量,这些变量一直存在,直到程序执行至那个匹配的 } 为止,此后即不复存在。因此函数的局部变量在遇到函数中匹配的 } 时就消失了。在其生存周期内,局部变量被保存在系统栈上。)请注意第一行的()后面没有;。您若不小心加上了分号,编译器会给出一大堆莫名其妙的错误信息。另外还要注意即使当函数没有参数时也要使用()。括号告诉编译器您在声明一个函数而不是简单地声明一个int类型。

对于任何要返回结果的函数来说,return语句是不可或缺的。它指明函数要返回的值并使函数立即退出。因此您可以在函数中放置多个return语句作为函数的多个退出点。若函数中没有return语句,则函数在执行到 } 时退出并返回一个随机值(这时很多编译器会发出警告)。C中的函数可以返回任何类型的值:包括int、float、char、结构体等等。

调用rand函数的方式有许多种。例如:x=rand();。此语句中x被赋值为rand的返回值。注意,在函数调用中即使没有参数也必须使用(),否则x将被赋值为rand函数的内存地址,而这通常并非您的本意。

也可以用这种方式调用rand:

if (rand() > 100)

或:

rand();

后一种方式中,rand函数被调用了,可是其返回值随即被丢弃。您可能不会以这种方式使用rand,但很多函数会返回某种错误代码作为调用结果,而您又不关心这些错误代码的话(如您知道不可能发生错误),就可以用这种调用方式将其丢弃。

如果您不想返回任何值的话,函数可以使用void作为返回类型。例如:

void print_header()
{
printf("第一个程序\n");
printf("作者 Marshall Brain\n");
printf("版本 1.0, 发布于1991年12月26日\n");
}

此函数没有返回值。可以像下面这样调用:

print_header();

调用时必须加上(),否则函数不会被调用,即使此语句在很多系统上能通过编译。

C函数可以接受任何类型的参数。例如:

 fact(int i)
{
int j,k;

j=1;
for (k=2; k<=i; k++)
j=j*k;
return j;
}

返回传入的整型参数i的阶乘。用逗号分隔多个参数:

int add (int i, int j)
{
return i+j;
}

C语言经历了许多年的演变。有时您会看到用“旧式风格”编写的函数。以add为例:

int add(i,j)
int i;
int j;
{
return i+j;
}

您应该能够读懂旧式代码。它们在执行上并无不同,只不过是另一种书写格式罢了。编写程序时应该使用“新式风格”(称为ANSI C),把类型声明写在参数列表中;除非您要把代码交付给只有“旧式”(非ANSI C)编译器的人。

 



 打印  电子邮件  反馈  引用
编辑推荐
软件狗是什么?
软件狗(Software Dog)是一种计算机软件的加密方式,是“硬件加密锁”的
间谍软件工作原理
您的计算机是否曾变得非常慢,即使打开Word处理器也会占用很长时间,间谍软件可能
什么是路由算法?
路由器是管理网络流量和发送数据包的,但是它是如何决定数据包发送的呢?通过本文,博
Gnutella文件共...
Napster在巅峰时期或许是有史以来最受欢迎的网站。紧随其后的文件共享体系架构
主页 |  公司信息 |  广告服务 |  招聘信息 |  隐私 |  联系我们 |  帮助 |  条款和条件