码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primmer 学习笔记

时间:2017-09-17 13:26:39      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:c语言   更改   最好   extern   组成   row   prim   整数   body   

 

 

    一、开始

(一)输入输出

1.endl的作用

endl操纵符用于结束当前行,将与设备关联的缓冲区内容刷新到设备中。如果没有这个字符,一旦程序突然崩溃,就可能导致输出还停留在缓冲区里,而不显示到设备。

2.输入输出运算符返回值的理解

“>>”和“<<”是运算符,他们的作用是将其左侧的运算对象。

3.输入输出运算符能自动判断操作对象的数据格式,不需要像C语言的printf和scanf函数一样对输入、输出参数进行格式化处理。因为标准库内定义了不同版本的输入输出运算符(重载?)

3.输入运算符的状态,例如,std::cin >> value 这个表达式,当用户输入非法时候(数据类型不匹配或者遇到输入结束),才会返回非真值。

二、变量和基本类型

(一)基本内置类型

1.基本数据类型包括算术类型和空类型,其中算术类型由字符、整形数、布尔值和浮点数4个类型组成。字符、整形数和布尔值可归为一类,浮点数属另一类。

 

 

 

C++算术类型

大类

具体类型

含义

最小尺寸

实际尺寸

(Windows 10 64bit系统)

整形

bool

布尔类型,实际上是0和1

未定义

8

char

字符类型

8位

8

wchar_t

宽字符(UNICODE出现前的宽字符类型)

16位

16

char16_t

Unicode字符

16

16

char32_t

Unicode字符

32

32

short

短整型

16

16

int

整形

16

32

long

长整型

32

32

long long

长整型(两个叠加使用也是一个数据类型)

64

64

浮点型

float

单精度浮点数

6位有效数字

32

double

双精度浮点数

10位有效数字

64

long double

扩展精度浮点数

10位有效数字

12

长度规定:int>=short,long>=int,long long>=long

字符型分为三种:char,signed char和unsigned char,三者不是同一类型。但char 和 signed char具体含义如何区分,由编译器决定。

字符串常量实际上是由字符常量组成的数组,同时编译器在这个数组后面加1个空字符“\0”。

Cout输出字符变量例如char = ‘a’,并不是输出“a”,而是对应的ascii数字。

(二)变量

1.变量的概念。变量提供一个具名的可供程序操作的存储空间。在C++中,变量和对象意义相同。

2.初始化问题。在C++中,当声明某变量使用“=”符号时候,是初始化,不是赋值语句。

3.初始化形式。在C++新标准中,全面应用{}来初始化对象(包括变量和类对象),例如 int a{9}。

4.变量的声明和定义。如果仅仅是声明一个变量,则用extern关键字,例如 extern int a。变量可以被声明多次,但只能定义一次。

5.引用必须初始化,且初始化后不能更改。

6.关于晦涩难懂常量(const)的一些概念。

(1)指向常量的指针和引用必须也是对应的常量指针和引用。不允许一个非常量引用绑定一个常量,但允许一个常量引用绑定一个非常量;同理,不允许一个非常量指针指向一个常量,但允许一个常量指针指向一个非常量。例如:

const int a = 1;

const int &b = a; //正确。

int a2 = 3;

int &b2 = a;//错误,引用不匹配。

但允许将一个常量引用绑定到一个非常量上,例如:

cons tint &reb = a2;

 

const double pi = 3.14;

double *ppi = &pi; //错误,非常量指针指向一个常量。

但反过来允许,例如:

double pi2 = 3.14;

const double *ppi2 = &pi2; //正确,允许一个常量指针指向一个非常量。

(2)关于顶层const 指针和底层const指针的概念。实际上主要是涉及两个概念,一个是该变量指向变量是const变量,即变量不能被改变;一个是该指针本身是常量,指针不能被改变,称为常量指针。通过以下例子来解释:

const double  pi = 3.14;

double rate = 0.68;

double * const pRate = &rate; //OK,这是一个指向非常量的常量指针

const double * pPi = &pi;//OK,指向常量的普通指针

const double * const cpPi = &pi;//OK,指向常量的常量指针。

(3)常量表达式的要求。左值定义为常量,右值也应该是常量,也就是说他的值在编译时候就能够确定。

(三)类型别名(typedef)

typedef char *pstring;

const pstring cstr = 0,这个语句的理解不能使用简单替换办法,否则会得出错误的意义。正确的理解办法是将pstring等同于一个数据类型,因此,此句话的const是修饰指针的,表示为pstring类型的常量,等价意义为于指向char的常量指针,而非const char *所表明的指向char常量的指针。虽然都是指针,但意义不同。

三、数组

(一)数组的初始化和赋值应注意的问题

1.数组之间不能直接赋值,即数组名不能直接进行赋值运算。

2.复杂数组声明的几个例子:

int *  ptrs[10]  //ptrs是含有10个整形指针的数组。

int &refs[10]   //错误,不存在引用的数组。

int (*Parray)[10] //Parray是一个指向10维整数组的指针。

int (&arrayRef)[10] //arrayRef是一个10维整形数组的引用。

int *(&arrayRef)[10] //arrayRef是一个10维整形指针数组的引用。

要理解数组声明的含义,最好的办法是从数组的名字开始,由内而外阅读。

(二)数组和指针之间的关系

1.数组名和对应类型的指针互为等价(但数组名不能进行++或—操作)。在用到数组名的时候,它被编译器自动替换为指向该数组第一个元素的指针。

例如 int a[10] = {0}; 则有int *pArr = a,等价于 int *pArr = &a[0];

C++ Primmer 学习笔记

标签:c语言   更改   最好   extern   组成   row   prim   整数   body   

原文地址:http://www.cnblogs.com/cpp520/p/7534808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!