识别C++中int *a; int &a; int & *a; int * &a

      识别C++中int *a; int &a; int & *a; int * &a



   C++中的语法还是和C有比较大的不同,C++中指针和应用的不同混用方式往往具有截然不同的语义,所以这里详细地对几种指针和引用的混用方式进行区分,指针和引用的混用常见的如下面几种,下面我们来分辨一把,看看你是否都已经熟知了.

int i;
int *a = &i;		//这里a是一个指针,它指向变量i
int &b = i;		    //这里b是一个引用,它是变量i的引用(别名),这个是c中没有的,这里表示将 i 与 b 联系起来,i, b,中任意一个 值发生改变 另一个也会发生相同的改变
int * &c = a;		//这里c是一个引用,它是指针a的引用
int & *d;	        //这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的 ,error: cannot declare pointer to 'int&'

区分技巧:在分析上面代码时,可以从变量标识符开始从右往左看,最靠近标识符的是变量的本质类型,而再往左即为对变量类型的进一步修饰。好了,有了这么多的详细介绍了,那么你是否掌握到了精髓了,那么下面看题:

int main(){
	int i = 0;
	int *a = &i;		//这里a是一个指针,它指向变量i
	int &b = i;		    //这里b是一个引用,它是变量i的引用(别名),这个是c中没有的,这里表示将 i 与 b 联系起来,i, b,中任意一个 值发生改变 另一个也会发生相同的改变
	b = i + 1;
	
	printf("The i %d\n",i);
	printf("The b %d\n",i);
	i = 3;
	printf("The i %d\n",i);
	printf("The b %d\n",i);
	

	int * &c = a;		//这里c是一个引用,它是指针a的引用
	printf("The c %d\n", c);
	printf("The a %d\n", a);
	int j = 1;
	a = &j;
	printf("The c %d\n", c);
	printf("The a %d\n", a);
	//int & *d;	        //这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的
	return 0;
}	

各位读者看官,能通过前面的讲解解读出这里的结果了吗,下面公布答案:

The i 1
The b 1
The i 3
The b 3
The c -1091180368
The a -1091180368
The c -1091180364
The a -1091180364

最后来总结一把 :

int * & a;

标识符a的左边紧邻的是&,证明a是一个引用变量,而再往左是*,可见a是一个指针的引用,再往左是int,可见a是一个指向int类型的指针的引用。

发布了89 篇原创文章 · 获赞 92 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/tkwxty/article/details/103190049
int