第2章 变量和基础类型
1.带符号类型和无符号类型混合运算时,带符号数会自动转换成无符号数。
2.true和false 是布尔类型的字面值,nullptr是指针字面值。
C++程序最好使用nullptr,同时尽量避免使用NULL。
#include <cstdlib>
#define NULL 0
3.指定字面值的类型,如
L'a' //宽字符型字面值,wchar_t
4.定义于函数体内的内置类型的对象如果没有初始化,则其值是未定义。类的对象如果没有显示地初始化,则其值由类确定。
5.第一次使用变量时再定义它。
6.复合类型:指针和引用
引用即别名:引用并非对象,它只是为一个已经存在的对象所起的另一个名字。
int a=5;
int &ref_a=a;
int &ref_b; //错误,引用必须被初始化
指针和引用的异同?
相同点:引用和指针都实现了对其他对象的间接访问。
不同的:①指针本身就是一个对象,允许对指针赋值和拷贝。②指针无须再定义时赋值。
③引用不是对象,没有实际地址,所以不能定义指向引用的指针。
理解复合类型:面对一条比较复杂的指针或引用的声明语句时,从右向左阅读有助于弄清它的真实含义。
int *p1,p2; //p1是指向int的指针,p2是int
int ival=5;
int *pi=&ival;
int **ppi=π //指向指针的指针
int *p;
int *&r=pi; //指向指针的引用
7.const
const和指针:
如果关键字const在*左边,表示被指物是常量;如果出现在*右边,表示指针自身是常量。
const的引用:
const int ci=1024;
const int &r1=ci; //right
int &r2=ci; //wrong, we can't change ci throw r2
int ci=5;
const int &r1=ci; //right,we can bind r1 to ci but we can't change ci throw r1
8.类内初始值
C++11规定,可以为数据成员提供一个类内初始值。创建对象时,类内初始值将用于初始化数据成员。没有类内初始值的成员将被默认初始化。
class 和 struct 定义的最后加 分号
class ClassName
{
//....
}; //分号
struct StructName
{
//...
};
第3章 字符串、向量和数组
理解复杂的数组声明
//从数组的名字开始“由内向外”的顺序阅读
int *ptr[10]; //ptr数组,含有10个int\*的元素
int &refs[10]=/\*?\*/; //错误,数组的元素应为对象,因此不存在引用的数组
int (*p)[10]=&arr; //p是指针,指向含有10个int的数组
int (&ref)[10]=arr; //ref是引用,引用含有10个int的数组
int *(&ref)[10]=ptrs; //ref是引用,引用含有10个int\*的数组
动态二维数组:http://blog.csdn.net/yvhqbat/article/details/51055638
C风格字符串
#include <cstring> //"string.h"
strlen(p)
strcmp(p1,p2);
strcat(p1,p2);
strcpy(p1,p2);