虽然 C-风格字符串(char数组 末尾是空字符) 和 string对象的本质是一样。但是string对象比char数组使用更加方便,string对象的用法和结构更加类似。(对象可以像结构一样直接赋给另一个对象,并且对象也可以像结构一样作为一个完整的实体以副本的形式传递给函数。并且如果想建立一个字符数组,不需要像C-风格字符串一样使用二维char数组,只需要建立一个string对象的一维数组就可以)
除一些特定的函数外(如getline() 等),在程序中,string对象和普通内置类型的处理方式一样。
C++中 类对象是基于结构的。(二者在使用中有很多性质相同)
递归函数会不停的调用自己,无线循环,除非代码中有终止递归连的代码(一般这个终止条件 使用 if语句。当满足终止条件时,程序会按照进入递归的路径返回)
当需要将一项工作不断的分解成更小的,类似的任务时,递归非常有用。
当递归时,每次递归包含两个分支的时候。这样的次函数的调用次数为 2^递归层数。(其实 分支越多,这样调用次数越多,程序的时间和空间复杂度越高。因此分支多的递归性能并不好)
不涉及函数指针的 C/C++ 是不完整的。
通常地址对于用户而言没什么用处,但是地址对于程序而言则非常有用。
将函数a的地址作为参数传递给另一个函数b,就可以在函数b中使用函数a。(这其实就是,使用函数指针来调用函数。一般一个函数的函数名就可以作为这个函数的指针——地址)
声明函数指针的例子,函数头:double pam(int); 函数指针: double (*pf)(int); 。(在这两个语句中pf就代表函数指针。定义函数指针的方法很简单,就是直接把函数头中的 函数名pam 替换成 (*pf) 。所有的函数指针都可以通过简单的替换进行定义)
因为 ()的优先级 高于 * ,所以定义函数指针的时候需要 使用 (*pf)的形式来替换函数名,如果不加 () 就回变成其他的含义。(比如,double (*pf)(int) ;这条语句 定义的是一个 函数指针 pf——就是指向函数的指针。double *pf(int) 定义的是一个 返回值 是 指针的函数 pf。)
当使用函数指针是,有两种语法:第一种,使用(*pf)() 的形式如,(*pf)(5);第二种,C++也允许像函数名那样使用函数指针,如直接写成 pf(5); 这种形式也是也可以的。
在函数原型中,参数列表中有一些等效的书写方式,例如 const double ar[] 与 const double *ar含义相同,并且const double ar[] 可以简写为 const double [],const double *ar 可以简写为const double * 。(因此,上面的种写法 在函数原型中是等效的)
声明一个函数指针的数组的语法,如:const double * (*pa[3]) (const double *,int)={f1,f2,f3};.(这条语句生命了一个 函数指针数组并且进行了初始化。[] 的优先级 要高于 *,所以这条语句最后得到的是一个数组,而不是一个指向数组的指针)
C++ 11 提供了auto关键字 ,可以简化代码一些复杂的声明(比如函数指针的声明)。(比如 对于语句 const double *(*(*pd)[3])(const double * , int) =&pa; 可以简写为 auto pc=&pa;。从auto关键字的简单的有点,可以看出C++11使得 C++更容易使用,从而让程序员把主要精力放在设计上而不是细节上。对比C++98,可以看出来,当时用C++98时,编译器主要是进行错误的检查;而当使用C++11时,编译器可以帮助程序员做一部分工作,比如正确的记性函数指针的声明)
C++提供 了typedef关键字,用于给类型创建别名。(例如,typedef double real; 再例如,typedef const double *(*p_fun)(const double *,int); 这个语句使得 p_fun称为 整个声明的别名,后续可以直接用这个别名来声明新的变量,p_fun p1=f1; p_fun pa[3]={f1,f2,f3}; p_fun (*pd)[3]=&pa; 。typedef可以减少输入量,使得编写程序不容易出错,也使得程序更容易理解。)
函数是c++的编程模块
函数使用的流程:提供定义和原型,调用函数
函数定义是实现函数功能的代码
函数原型提供了函数的接口
函数调用使得程序能够将参数传递给函数,并执行函数的代码
当且仅当用于函数声明中的 函数形参书写时,以下两个语句才是等价的。(typeName arr[]; typeName * arr;)
C++中使用空字符来表示字符串的结束(因此在函数中可以通过检测空字 来判断字符串的结尾)。
C++中函数可以是递归的,也就是说,函数代码可以包括对函数本身的调用。