关闭

Thinking in c++ 第三章

标签: C++读书笔记
476人阅读 评论(0) 收藏 举报
分类:

此为本人读书记录,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
查看评论

thinking in c++的课后习题答案

  • 2015-01-22 16:52
  • 259KB
  • 下载

《Thinking in C++》练习题答案——3-3

#include #include using namespace std;int main(){        string words;        in...
  • cgtezhao
  • cgtezhao
  • 2007-05-20 18:09
  • 423

Thinking In C++中文版

<br />----------------------- Page 1-----------------------<br /> 下载 <br />        ...
  • liu_hang_yu
  • liu_hang_yu
  • 2011-05-17 07:11
  • 4080

从《thinking in C++》被迫转到《C++ Primer》第一天

今天啃《thinking in C++》有种不能继续下去的感觉,一方面我一看书就停不下来,难懂+没有休息容易困,所以看的速度并不快。另外感觉里边有很多内容在建立在你了解其使用的基础上的理论提升,所以我认识需要补一下基础。在网上查了一下,确定串插着看《C++ Primer》。 《C++ Pr...
  • lihb018
  • lihb018
  • 2014-09-21 22:36
  • 3853

Thinking in C++ (1-5)

 创建和删除对象从技术上讲,OOP的主要领域是抽象数据类型,继承,以及多态,但是其他领域一样很重要,在这一节中我们简单的介绍一下这些内容。尤其重要的是对象创建和删除的方法。对象的数据是保存在哪里的,又是什么在控制着它们的生命周期呢?在这里,不同的编程语言的基本原理各不相同,C++更看重的是...
  • tiandejian
  • tiandejian
  • 2006-07-17 10:48
  • 1314

Thinking in C++ 第二章,第三章

1.    解释器和编译器:       解释器将源代码转化成一些动作,并且立即执行。例如,BASIC 解释器一次翻译和执行一行,然后将这一行丢掉。Python 语言的解释器,先把整个程序 转化成某种中间语言,然后由执行速度更快的解释器来...
  • ZJU_Sutton
  • ZJU_Sutton
  • 2013-05-09 19:30
  • 644

《Thinking in C++》练习题答案——2-1

#include using namespace std;int main(){ cout } 
  • cgtezhao
  • cgtezhao
  • 2007-05-13 16:26
  • 362

《thinking in c++》与我的翻译 (一)

声明:我的翻译不求意思一样,只求你学习编程的时候能够容易理解。因此,我可能会把其中的某些语句隔过去,把某些词换一种描述。 1:Introduction to Objects The genesis of the computer revolution was in a machine. The ...
  • a951084634
  • a951084634
  • 2011-11-17 22:16
  • 1261

Thinking In系列大师Bruce Eckel博客中文版入驻CSDN

 Bruce Eckel是著名的计算机科学作家,其Thinking In系列是深受读者欢迎的经典著作.从1986年至今,Bruce Eckel已经发表了超过150篇计算机技术文章(其中有许多C++语言方面的论文) ,出版了6本书(其中4本是关于C++的),并且在全世界做了数百次演讲。Bru...
  • beckel
  • beckel
  • 2006-08-29 09:54
  • 8808

C++Primer 中文版 第五版 第三章课后习题答案

前言:自己做的,如果有错误,要提出来哟... //3.1 略 //3.2 /* #include using namespace std; int main() {   string line;   getline(cin,li...
  • Little_boy_z
  • Little_boy_z
  • 2016-06-03 18:23
  • 1370
    个人资料
    • 访问:40550次
    • 积分:867
    • 等级:
    • 排名:千里之外
    • 原创:47篇
    • 转载:0篇
    • 译文:1篇
    • 评论:7条
    最新评论