c++primer第二章读书笔记---变量和基本类型

C++中,什么是复合类型?

刚开始,还以为自定义的类是复合类型。查了C++ primer才知道复合类型不是类。

在C++中类型大致可以分为三种

一、内置类型

如int, char, float, unsigned等。内置类型是最基本的类型。

二、复合类型

复合类型:基于其他类型定义的类型,使用其它类型定义的类型。有三种复合类型:引用,指针,数组。

三、类类型

就是类。比如string以及自己定义的类。

(一)复合类型---引用

引用就是为对象起了个名字

引用使用注意事项:

1.一个变量可取多个别名

2. 引用必须初始化

3. 引用只能在初始化的时候引用一次,不能改变为再引其他的变量。

一般初始化变量时,初始值会被拷贝到新建的对象中,但是在定义引用的时候,是通过把引用和它的初始值绑定到一起,一旦初始化完成,引用和它的初始值一直绑定在一起,因为无法令引用绑定到其他对象上,因此引用必须从一而终。

(二)复合类型---指针

指针是指向另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的访问,然而指针与引用又有很多不同点,比如:

1. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终),指针变量

的值可变。

2. 引用必须指向有效的变量(引用必须初始化),指针可以为空。

3. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的,

sizeof指针是对象地址的。

4. 指针和引用增(++)减(--)意义不一样。

5. 相对指针,引用更安全。

获取对象的地址

指针获取某个对象的地址,想要获取该地址,需要使用取地址运算符

int ival=42;

int *p=&ival;//p存放ival的地址,或者说是指向ival的指针

因为引用不是对象,没有实际地址,所以不能定义指向引用的指针

建议初始化所有指针

访问未经初始化的指针会造成程序奔溃哦,而且一旦奔溃,想要定位到出错位置就会变得特别棘手

大多数编译器下,如果使用未经初始化的指针,则该指针所占内存空间的当前内容被看做是一个地址值,访问该指针相当于访问一个在本不存在的位置上的本不存在对象。

所以呢。。。。。。想要作为一个合格的程序猿,我们应该初始化所有指针,并且在可能的情况下,等到定义了对象之后再定义指向它的指针,如果实在不清楚该指针应该指向何处,就索性将它置空。

(三)const限定符

有时候我们定义一个变量,它的值不能被改变。例如用一个变量表示缓冲区的大小,使用变量的好处是如果我们觉得缓冲区大小不在合适时可以对其进行调整,另一方面又害怕程序一不小心改变这个值,因此将它用const关键字修饰加以限定

默认状态下,const对象仅在文件内有效

当编译时初始化的方式定义一个变量

const int i=2;

编译器在编译过程中把用到i的地方都替换成相应的值,为了执行上述替换,编译器必须知道变量的初始值,如果程序包含多个文件,则每个const对象的文件都必须得能访问到它的初始值才行,要做到这一点就必须在每一个用到变量的文件中对它定义,,为了支持这个用法,同时避免同一变量被重复定义,默认情况下const对象设定为在本文件中有效,当多个文件出现了同名的const对象时,等同于他们在不同文件中为不同的变量,即使名字相同。

const引用

允许将非常量类型的引用转化为常量类型的引用,指针也一样

int i=10;

const int&j=i;

顶层const

指针是对象而引用不是

允许把指针本身定义成常量,常量指针必须初始化,而初始化一旦完成,则它的值(存放在指针中的那个地址)就不能再改变了,顶层const表示指针本身就是一个常量,底层const表示指针所指向对象是一个常量。

顶层const表示任意的对象是常量,这一点对任何数据类型都适用(算数类型,类,指针等),底层const则与指针和引用等符合类型有关

int i=0;

int*const p1=&i;//不能改变p1的值,这是一个顶层const

const int q=342;//不能改变q的值,这是一个顶层const

const int* p2=&ci;//允许改变p2的值,这是一个底层const

时间: 2024-10-13 12:52:22

c++primer第二章读书笔记---变量和基本类型的相关文章

Android深度探索——第二章读书笔记及心得

Android开发环境搭建 ——第二章读书笔记及心得 通过本章的学习了解了如何对Ubuntu Linux下的Android进行搭建,包括搭建Android应用程序开发环境.Android NDK开发环境和交叉编译环境的搭建.了解了搭建Android环境所需要的各种东西,了解了配置ADT的必要性—以便ADT能够找到Android SDK.知道了底层开发所需要的各种工具.学会了如何在Ubuntu下安装JDK.以及编译交叉编译环境,当初在学习Linux交叉环境编译的时候就不是特别成功,中间出了很多的错

《控制系统设计指南》第一章和第二章读书笔记(一)

第一章 控制理论简介 1.2控制系统 1.2.1控制器 控制器由控制律与功率变换器协同工作,控制律只生成信息,必须施加能量才能控制被控对象. 1.2.2被控机器 被控机器由被控对象与反馈装置组成. 第二章 频率域研究法 2.1拉普拉斯变换 2.2传递函数 一个频率域传递函数只限于描述线性.时不变元件.在现实中并不存在完全满足这几个限制的系统,为了解决这个问题,可以设计补偿环节使得系统非常接近线性时不变系统. 2.4框图 反馈回路的简化: Mason信号流程图: 2.5相位与增益 增益通常用dB表

Android深度探索(卷一)第二章读书笔记

第二章讲述了搭建Android开发环境.我们首先需要知道Android底层开发需要哪些工具.开发.测试和调试Linux驱动.HAL程序库需要的工具有:JDK6或以上版本.Eclipse3.4或以上版本.ADT.CDT.Android SDK.Android NDK.交叉编译环境.Linux内核源代码.Android源代码.minicom. 在明确开发工具后,我们就要进行开发环境的搭建. 安装JDK.方法一:通过官网下载JDK,并进行配置.配置需要在profile文件来设置PATH环境变量.过程为

第二章读书笔记

在ubuntu下进行android开发的环境搭建主要有以下5个部分: (1)       安装jdk (2)       安装android_sdk (3)       安装eclipse (4)       为eclipse添加adt插件 (5)       添加SDK平台和android平台 一.安装jdk 先到sun官网下载相应的jdk的bin文件:具体链接如下: 我下载的是jdk-6u38-linux-i586.bin,选择这个版本是因为这个版本之后是7以上的版本,所以这个应该会是比较稳

Android深度探索--HAL与驱动开发----第二章读书笔记

1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Android NDK:交叉编译环境 :Android源代:用于调试开发板的串口工具:minicom. 2. Linux下如何安装JDK 创建安装目录,在/usr/java下建立安装路径,并将文件考到该路径下: # mkdir /usr/java jdk-6u11-linux-i586.bin 这个是自解压的

《C++ Primer 4th》读书笔记 第4章-数组和指针

原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3911573.html <C++ Primer 4th>读书笔记 第4章-数组和指针

《C++ Primer 4th》读书笔记 第5章-表达式

原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3912114.html <C++ Primer 4th>读书笔记 第5章-表达式

《C++ Primer 4th》读书笔记 第7章-函数

原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3912413.html <C++ Primer 4th>读书笔记 第7章-函数

《C++ Primer 4th》读书笔记 第6章-语句

原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3912407.html <C++ Primer 4th>读书笔记 第6章-语句