聊以此文记录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类型