C Primer Plus学习_33 第九章------函数 函数初识(上)

 

第九章------函数

本章介绍以下内容:

 

  • 关键字:return
  • 运算符:*(一元),&(一元)
  • 函数及其定义方式
  • 如何使用参数和返回值
  • 如何把指针变量用作函数参数
  • 函数类型
  • ANSIC原型
  • 递归

如何组织程序?C的设计思想是,把函数用作构建快。我们已经用过C标准库的函数,如printf()、scanf()、getchar()、strlen()。接下来要研究的是自己创建函数。前面的章节书上已经有过介绍了,接下来就是巩固之前所学习的知识并进一步拓展。

复习函数

函数(function)是完成特定任务的独立代码单元。虽然C中的函数和其他语言中的函数、子程序、方法、过程作用相同,但是细节上略有不同。一些还是执行某个动作,如printf()把数据打印到屏幕上;一些函数找出一个值提供给程序使用,如strlen()把指定字符串的长度返回给程序。

为什么要使用函数?

 

 

  1. 提高代码复用性。如果一个程序要多次完成某个任务,那么只要编写一个合适的函数来重复使用,就可以避免重复出现大段大段相同功能的代码,只要使用这个函数就可以解决问题。或者在不同的程序中也可以使用该函数。
  2. 函数让程序模块化,增加可读性。即使出现只需要完成某任务一次,也值得用函数。
          • 读入一系列数字;
          • 分类这些数字;
          • 找出这些数字的平均值;
          • 打印一份柱状图;

函数可以看作是根据传入信息(输入)及其生成的值或响应的动作(输出)来定义的“黑盒”。如果不是自己写的函数根本不用关心黑盒里面的内容(比如printf()),把注意力集中在程序的整体设计上,而不是某些函数实现的细节上。

接下来,了解一下如何正确的定义函数、如何调用函数和建立函数间的通信。

本章的第一个程序:

/*lethead1.c*/ 
#include<stdio.h>
#define NAME "GIGATHINK,INC"
#define ADDRESS "101 Megabake Plazz"
#define PLACE "Megapolie, CA 94904"
#define WIDTH 40

void starbar(void);	//函数原型
 
int main (void)
{
	starbar();		//使用函数 
	printf("%s\n", NAME);
	printf("%s\n", ADDRESS);
	printf("%s\n", PLACE);
	starbar();
	
	return 0;
}

void starbar (void){//定义函数 
	int count;
	
	for(count = 1; count <= WIDTH; count++){
		putchar('*');
	} 
	putchar('\n');
}

运行结果如下:

****************************************
GIGATHINK,INC
101 Megabake Plazz
Megapolie, CA 94904
****************************************

分析:

 

  • 程序在三各地方使用到了starbar标识符:函数原型,告诉编译器函数starbar()的类型;函数调用,表明此处执行函数;函数定义,指定了函数要做什么。
  • 函数和变量一样,有多种类型(void,int,double... ...)。任何程序在使用函数前都要声明函数的类型。

 

void starbar(void);	//函数原型

这一行中含有圆括号()表明了starbar是一个还是名。第一个void是函数类型,表明函数没有返回值。第二个void(在圆括号中)表明函数不带参数。“;”表明这是声明函数,不是定义函数。一般而言,函数原型会指明返回值类型和接收的参数类型,  在这里程序将使用一个名为starbar()、没有返回值的无参函数,并告诉编译器去别处找函数定义。

 

  • 程序将starbar()函数原型至于main()前面,放在别处也是可以的。
  • 在main()的执行过程中调用了starbar()函数:

 

	starbar();		//使用函数 

这是调用void类型函数的一种形式。当执行到”starbar();“语句四,会找到函数定义并执行其中的内容。执行完starbar()中的代码计算机会返回继续执行main()下一行

 

  • 程序中starbar()和main()的定义形式相同。注意,这里的函数头starbar()后面就不带有“;”了,是告诉编译器这里是定义starbar(),而不是调用或声明。
  • 程序把starbar()和main()放在同一个文件中(当然也可以放在两个文件中,后面说)。
  • starbar()函数中的变量count使局部变量,该变量只属于starbar()。在程序其他地方定义使用count变量都与这里的count无关,他们是不同的变量。

如果把starbar()看作是一个黑盒,那么它的行为是打印一行“*”不用给该函数提供任何输入,因为调用它不需要其他任何信息。同时starbar()也没有返回值,所以它也不会提供main()如何信息。简而言之就是starbar()不需要与主函数通信。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值