Thinking in c++ 第三章

此为本人读书记录,thinking in C++ 第三章 :C++中的C

3.1创建函数

在C++中,函数定义的参数表中可以使用未命名的参数

3.1.1 函数的返回值

C++函数原型必须指明函数的返回值类型(在C中,如果省略返回值,则默认为返回int型)

3.1.2 使用C的函数库

3.1.3 通过库管理器创建自己的库

3.2 执行控制语句

3.2.1 真和假

3.2.2 if-else语句

3.2.3 while语句

3.2.4 do-while 语句

3.2.5 for语句

3.2.6 关键字break和continue

3.2.7 switch

3.2.8 使用和滥用goto

3.2.9递归

3.3运算符简介

3.3.1优先级

3.3.2自增和自减

3.4数据类型简介

用户自定义的数据类型,作为一个类,被称为抽象数据类型

3.4.1 基本内建类型

3.4.2 bool类型与true和false

3.4.3 说明符

说明符(specifier)用于改变基本内建类型的含义并把它们扩展成一个更大的集合。有4个说明符,long short、signed、unsigned

3.4.4 指针简介

相继定义的变量在内存中是连续存放的,它们根据自己的数据类型所要求的字节数分开来。

3.4.5 修改外部对象

3.4.6 C++引用简介

带引用的函数调用比带指针的函数调用在语法上更清晰。

3.4.7 用指针和引用作为修饰符

如果声明指针是void*,它意味着任何类型的地址都可以间接引用那个指针。 可能造成个漏洞,int*改变引起存储空间的大小。

3.5 作用域

3.5.1 实时定义变量

3.6 指定存储空间分配

3.6.1 全局变量

如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以访问这个数据。

3.6.2 局部变量

3.6.2.1 寄存器变量

寄存器变量是一种局部变量,关键字register告诉编译器“尽可能快的访问这个变量”,使用register的限制:不能得到register的地址,register只能在一个块中声明,不可能有全局的或静态的register变量。可在函数中使用register变量作为一个形式参数。

3.6.3 静态变量

3.6.4外部变量

3.6.4.1 连接

连接用连接器所见的方式描述存储空间。连接方式有2种,内部连接和外部连接。在C/C++中,内部变量是又关键字static指定的。 外部连接意味着为所有编译过的文件创建一片单独的存储空间。 函数之外定义的所有变量(在c++中除了extern声明)和函数定义默认为外部连接。可以使用关键字static特地强制它们具有内部连接,也可以在定义时使用extern显示指定标识符具有外部连接。 调用函数时,自动(局部)变量只是临时存在于堆栈中,连接器不知道自动变量,所以这些变量没有连接。

3.6.5常量

修饰符const 告诉编译器这个名字表示常量,不管是内部的还是用户定义的数据类型都可以定义为const,试图修改会报错。

3.6.5.1常量值

在C++中,一个const必须有初始值(在c中不是),常量值前带0被认为是八进制数。带0x被认为16进制。

3.6.6 volatile变量

限定词volatile告诉编译器“不知何时改变”。防止编译器依据变量的稳定性做任何的优化。

3.7运算符及其使用

3.7.1赋值

3.7.2 数学运算符

3.7.2.1预处理宏介绍

3.7.3关系运算符

3.7.4 逻辑运算符

3.7.5 位运算符

位运算符只适用整形char、int、long。

3.7.6移位运算符

3.7.7 一元运算符

3.7.8 三元运算符

a= --b? b:(b=-99);理解为如果b自减运算的结果为0,则把b的值赋给a,如果b变为0,a和b都变为-99.b总是在递减,只有为0,才被赋值为-99.

3.7.9 逗号运算符

3.7.10 使用运算符时的常见问题

=与==,&与&&

3.7.11转换运算符

(cast),

3.7.12C++的显示转换

3.7.12.1 静态转换(static_cast)

static_cast 全部用于明确定义的变换,包括典型的非强制转换,窄化变换,使用void*的强制转换,隐式类型变换和类层次的静态定位。

3.7.12.2 常量转换(const_cast)

如果从const转换为非const或从volatile转换为非volatile。可以使用const_cast.

3.7.12.3 重解释转换(reinterpret_cast)

3.7.13 sizeof——独立运算符

sizeof是一个运算符,不是函数。如果对变量使用,可以不要括号。

3.7.15 显示运算符

3.8创建复合类型

3.8.1 用typedef命名别名

3.8.2用struct把变量结合在一起

struct的声明必须以分号结束

3.8.2.1指针与struct

3.8.3用enum提高程序清晰度

3.8.4用union节省内存

3.8.5数组

3.8.5.1指针和数组

c++中函数main()有特殊的参数列表

int main(int argc,char* argv[ ]){   }

第一个参数的值是第二个参数的数组元素个数,第二个参数总是char*数组,因为数组中的元素来自作为字符数组的命令行。

3.8.5.2探究浮点格式

3.8.5.3指针算术

不能把2个指针相加,指针相减得2个指针间隔的元素个数

3.9调试技巧

3.9.1调试标记

3.9.1.1预处理器调试标记

3.9.1.2 运行期调试标记

3.9.2 把变量和表达式转换成字符串

3.9.3 c语言assert()宏

3.10函数地址

函数载入计算机执行后有一块内存,这个内存有个地址,可以通过指针使用函数地址

3.10.1定义函数指针

定义一个指针指向一个无参无返回值的函数,可写成: void(*funcptr)(); 如果不加括号,void *funcptr();可能为声明一个函数

3.10.2复杂的声明与定义,

void * (*(*fp1)(int))[10];表示fp1是一个指向函数的指针,该函数接受一个 整形参数,并返回一个指向含有10个void指针数组的指针。

float(*(*fp2)(int,int,float))(int);fp2是一个指向函数的指针,该函数接受3个参数(int、int和float)且返回一个指向函数的指针,该函数接受一个整形参数并返回一个float。

3.10.3使用函数指针

3.10.4指向函数的指针数组

3.11 make:管理分段编译

3.11.1make的行为

3.11.1.1宏

3.11.1.2后缀规则

3.11.1.3默认目标

3.11.2本书中的makefile

3.11.3makefile的一个例子


  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值