聊以此文记录c++ primer的学习过程
int a = 3;
const int *b = &a; //可以这样,将非常量的地址赋给b
//此时,b认为自己指向的是常量,
//所以不能通过b去修改a的值
const int &ar = a; // ar引用a,不能通过ar去修改a的值
/*******************************/
const int a = 3;
int *ap = &a; // 错误,因为a是常量,而int *ap的言外之意,
//是通过ap可以修改ap所指向的内容
int *ar = a; //显然,也是错误;
/******************************/
const int &b = 5; //正确,字面常量可以如此赋值给b;
int &c = 5; //错误,5是常量,而int &c 是说c引用的不是常量
/******************************/
//附加上数组
int *ptrs[10]; //ptrs是含有10个整型指针的数组
// 从右往左看,[10]代表ptrs是一个数组
//而* 则代表数组每个项是指针;
//int,则代表指针是int型的
int (*ptrs)[10]; //从括号内开始读;
//ptrs是一个指针,而不是一个数组,
//[10] 是说ptrs指向含10个元素的数组
int (&ptrRef)[10]; //同理,ptrRef是一个引用,
//其引用一个含有10个整数的数组
int &ptrRef[10]; //错误!不存在引用的数组
int *(&array)[10]; //根据以上方法,array是一个引用
//array引用一个含有10个元素的数组
//每个元素是一个指针
//每个指针是整型的
// 因此,array是数组的引用,该数组含有10个指针;
typedef int arrT[10]; //arrT是一个类型别名,它表示的类型是含有10个整数的数组
using arrT = int[10]; //arrT的等价声明,
arrT* fun(int i); //func 的返回值是一个指针,指向含有10个元素的数组
/******************************************/
int (*func(int i))[10]; //func(int i)表示调用func函数时,需要一个int类型的实参
//(*func(int i)) 以为这可以对函数调用的结果执行解引用操作
//(*func(int i))[10] 表示解引用func的调用将得到一个大小是10的数组
//int (*func(int i))[10] 表示数组中的元素都是int类型