《C++ Primer 》第三十九天 查漏补缺

虽然 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++中函数可以是递归的,也就是说,函数代码可以包括对函数本身的调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容