程序设计与C语言学习笔记_第五章函数_2

5.3 函数原型及函数声明(*)

1. 当我们将被调函数写在主调函数之前时,在调用时,被调函数的一切信息对主调函数来说都是已知的,因为编译是按先后顺序进行的。但如果被调函数在主调函数之后,那么就必须进行函数的声明。 

1) 为什么要知道被调函数信息?:编译器会利用函数声明的信息,检验函数的调用。如果调用和原型不一致则会停止进一步真正调用,避免致命错误或逻辑错误,提高编译效率和速度。也因为调用函数要使用这些信息啊

2) 为什么要知道外部变量信息:提高编译效率。

2. 函数声明的一般格式:<返回值类型><函数名>(<参数列表>)

1) 参数列表中,可以将参数名省略,只写类型名。

2) 函数的声明就是函数原型的声明。

3) 函数声明的地点,如果在函数之外,则声明之下的函数都可以调用该函数,如果在函数内,则只有本函数能调用它。

5.4 数据存储类

1. 当用户编程上机的时候,编译器会为用户提供一定的内存空间让用户使用,这个内存空间分为以下三部分:

1) 程序区:用来存放用户的程序。

2) 动态区:用来存放临时的数据和函数。

3) 静态区:用来存放长期存在的数据和函数。

5.4.1 自动变量(auto)

5.4.2 寄存器(register)变量

1. 定义:存放在运算器的寄存器中的变量,相对于存放在内存中的变量,更加快速高效。

2. 定义方式:register int i;

3. 要注意的问题:

1) 寄存器变量的个数是有限的,超出的变量会作为自动变量处理。

5.4.3 静态(static)变量

1. 定义:在函数中定义静态变量,当调用函数后,不会收回静态变量的内存,变量的值得以保存。静态变量存在内存的静态区。

2. 定义方式:static int st=0;

3. 要注意的问题:

1) 在定义时,如果不赋初值,则系统会对其自动赋初值(数组型变量初值为0,字符型变量初值为空字符’\0’)

2) 只赋一次初值,当再次调用该函数时,上次调用的结果就作为本次的初值使用。

3) 函数内的静态变量在函数肯定是不能引用的啊!

5.4.4 外部变量(全局变量)

1. 定义:在所有函数之外定义的变量,程序中所有的函数都可以引用。外部变量也放在内存静态区。

2. 在程序最开头定义即可,若子函数以头文件的形式存在,应该也在其头文件包含语句之前。

3. 要注意的问题

1) 当外部变量定义在程序最开头时,所有函数都在其“自然作用范围”之内,因此可以对其直接引用。但如果外部变量定义在函数之后的话,则要先用extern 类型名 变量名 来进行声明。

2) 无论是函数还是外部变量,一定要注意其“自然作用范围”,如果在自然范围之外,必须做声明,才能引用它们。

5.5 多文件程序中函数和变量的处理

1. 若一个文件中定义的外部变量和函数不允许其他文件引用,这时应在函数名和变量名的前面加上关键字static

2. 但凡引用其它文件的函数和变量,必须作extern说明。是错误的!

5.6 递归

5.6.1 递归函数

5.6.2 间接递归

5.7 迭代

5.7.1 迭代公式和迭代算法

5.7.2 递归与迭代的比较

5.8 系统库函数

5.8.1 rand函数

1. rand()函数产生一个随机的正整数(0-32767),要得到a到b之间的随机数:a+rand()%(b-a+1)。

2. 反复调用rand()函数,得到的随机数是一样的,这是因为rand()只在随机数组的固定位置挑取数据,如果随机数组不变的话,挑取的数据也不会变。

5.8.2 srand函数

1. 针对rand函数的问题,srand()函数提出解决方案,只要srand()函数的参数变化,它就可以提供不同的随机数组,给rand()函数使用。rand(<参数>)

1) srand()函数的参数类型为unsigned int

2) time()函数存在与头文件time.h中,返回以秒计算的当前时间字符串,在time中加上NULL参数(time(NULL)),则返回以秒计算的当前时间整数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值