C++primer

第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=&pi;  //指向指针的指针

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);

你可能感兴趣的:(C++primer)