C++中的指针和引用,结合数组

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



C++中的指针和引用,结合数组,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。