首页 > 代码库 > 《好学的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章 函数--分工与合作