9.函数
9.1
使用函数可以实现代码复用,更加方便
9.1.1 创建并使用简单函数
有返回值的时候前面要添加返回类型,没有就添加void
函数中的变量是局部变量,不能在函数外直接应用
9.1.3 函数参数
void show_n_char(char ch, int num);
要以此形式传入参数,但是传入的参数在函数中改变了对外界此参数无影响,要想改变参数值需传入地址
9.1.4 定义带形式参数的函数
void show_n_char(char ch, int num)
里面的char ch和int num为形参,调用函数的时候需要传入实参
形参需要定义类型,实参为了避免出错应与形参一致
9.1.5 声明带形式参数函数的原型
创建了一个函数,为了方便一般在主函数后面创建,但是要在主函数前面声明一下,让主函数知道有这个函数,不然会显示未定义
9.1.8 使用return从函数中返回值
函数有返回值时应该在函数最后return出来
return后面的语句不执行
还可以这样使用return:
return;
适用于没有返回值的情况
9.1.9 函数类型
int main(void);
int 就是该函数的类型,并且在函数中要返回这一类型的参数。
9.2 ANSI C函数原型
ANSI C标准要求在函数声明时还要声明变量的类型
9.2.3 无参数和未指定参数
void print_name(); 未指定参数
void print_name(void); 无参数
9.2.4 函数原型的优点
让编译器捕获在使用函数时可能出现的许多错误或疏漏
9.3 递归
在函数中用此函数
9.3.3 尾递归
把递归调用置于函数的末尾
9.3.5 递归的优缺点
优点是递归为某些编程问题提供了最简单的解决方案。
缺点是一些递归算法会快速消耗计算机的内存资源。
9.4 编译多源代码文件的程序
9.4.1 UNIX
许多UNIX系统都给cc命令起了一个别名用作其他编译器命令
将编译两个文件并生成一个名为a.out的可执行文件:
cc file1.c file2.c
生成两个名为file1.o和file2.o的目标文件
使用以下命令编译第1个文件,并与第2个文件的目标代码合并:
cc file1.c file2.o
9.4.2 Linux
同上
9.4.3 DOS命令行编译器
绝大多数DOS命令行编译器的工作原理和UNIX的cc命令类似,只不过使用不同的名称而已。
对象文件的扩展名是.obj
9.4.5 使用头文件
include "hotel.h"
在头文件中写函数,主文件中使用,提高代码复用率,让代码模块化
9.5 查找地址:&运算符
%p是输出地址的转换说明
在FORTRAN中,子例程会影响主调例程的原始变量
在 C语言中不是这样。每个C函数都有自己的变量。这样做更可取,因为这样做可以防止原始变量被被调函数中的副作用意外修改
9.6 更改主调函数中的变量
假设要交换两个变量x和y的值
1:
temp = x;
x = y;
y = temp;
2:
x=x+y
y=x-y
x=x-y
3:
x=x^y
y=x^y
x=x^y
更改主函数中的参数时,可以通过函数内定义新变量接收然后传回,再就是传入指针
9.7.1 间接运算符:*
ptr = &bah; ptr代表地址
val = *ptr val代表ptr对应的变量
地址运算符:&
后跟一个变量名时,&给出该变量的地址。
地址运算符:*
后跟一个指针名或地址时,*给出储存在指针指向地址上的值。
9.7.2 声明指针
int * pi; // pi是指向int类型变量的指针
int* pi和 int *pi是一样的
*和指针名之间的空格可有可无。
指针实际上是一个新类型,不是整数类型
ANSI C专门为指针提供了%p格式
9.7.3 使用指针在函数间通信
void interchange (int * u, int * v); 声明这样写
interchange(&u,&v) 调用这样写
形参名可以省略
函数的返回类型:
函数的返回类型指的是函数返回值的类型。如果返回值的类型与声明的返回类型不匹配,返回值将被转换成函数声明的返回类型。
函数签名:
函数的返回类型和形参列表构成了函数签名。

浙公网安备 33010602011771号