首页 > 代码库 > 《好学的C++ 第2版》 第3章 函数--分工与合作
《好学的C++ 第2版》 第3章 函数--分工与合作
只有main函数是肯定会被执行的,其他函数都是被调用才会执行。
调用函数,一直到函数结束或是遇到return语句,执行顺序才返回给调用者。//无return? return了错误类型?无需返回值却return了值?
调用可递归调用。
推荐:在程序开头声明函数,在程序某个地方定义函数,在其他函数里调用这个函数。//函数被调用前可不声明,例如main函数。main函数能被调用吗?能调用自身吗?
原型理论上可以放在被调用之前的任何地方。
调用之前不必定义,声明就可以,这让函数相互调用成为可能。//it:c/c++这种只认识前面程序的语言,没有声明就不能相互调用了。
函数声明也称用原型,只提供类型信息。函数不返回任何值的话,返回类型填void。//it:无需入参的话,可以是()推荐填void
函数定义,花括号必不可少。
!!函数调用是一种表达式,只要返回不是void,就可以将它用在更大的表达式里。//void func1(void);int func2(void),那func2(func1())是否合法? if(func1())会怎样?
返回void的函数可以不return? !!!标准是返回int,没有return某些编译器会自动补上return 0!!!
main
http://blog.csdn.net/piaojun_pj/article/details/5986516,其中:
void main(){}是c99标准里未定义的行为,不同编辑器处理不同,只有int main才是确保对的。main()默认是返回int,
会告警。
int main(void){/*...*/}及以下带参数定义方法是绝对正确和推荐的,//it:其他的定义方法要么是兼容但不推荐,要么
是未定义行为取决于编译器。
main可接受命令行参数(此处未讲到,搜索可知),可将main定义为:
int main(int argc, char* argv[]){/*...*/}
或者
int main(int argc, char** argv){/*...*/}
其中argv是字符串数组,argc表示数组中字符串的数量。argv[0]是所在可执行文件的名称或空串,argv[1]开始是
各个命令行参数 //it:argc至少是1
main函数不能被调用!
//it:main是程序对外的入口和出口,可以从命令行获取参数,也可以给操作系统返回int或不返回值 ?可否返回double char*等类型?
全局变量:声明在所有函数的外部,其生命周期从声明开始到文件结束,任何函数都可以改变它的值。经常用于函数之间共享数据。 //it:存储在静态区
后续要介绍的类,为一组密切相关的函数共享数据提供了更妥善方案:同一个类的函数共享该类私有数据,而其他类的函数享用不到。
递归调用:为了避免无限循环,需要提供退出机制!
栈:计算机负责管理的一段专用内存区域,机制是后进先出(LIFO)。跟踪记录所有尚未返回的函数调用的相关信息(包括输入参数和局部变量)
获取随机数:
c++0x里用nullptr,尽量用它而不用NULL
#include <cmath>
#include <cstdlib>
#include <ctime>
srand(time(NULL));//set seed for random numbers,伪随机序列的第一个数
int a = rand() % 6 + 1; //rand生成int范围内的伪随机数,而a是1到6范围内的随机数
小结补漏:
函数会一直运行到结束或执行到return语句
两个或多个函数调用属于递归调用的变体,只要存在能终结递归调用的机制,就是合法的。
《好学的C++ 第2版》 第3章 函数--分工与合作