为了账号安全,请及时绑定邮箱和手机立即绑定

关于&和*运算符的疑惑

老师好!为什么*可以这么用:

int const *myAge = &age;
int * const myAge = &age;
const int * const pi2 = &age;
int const * const pi2 = &age;

而&不可以这么用,但是如果这么用:

int const &myAge = age;
int & const myAge = age;
const int const &myAge = age;
const int & const myAge = age;	

vs2013下会报错但可以运行,&和*到底有什么本质上的差别(老师的课讲的真好)

#include <iostream>
using namespace std;

int main(){

	int age = 22;
	int yourAge = 23;

	const int &myAge = age; //age的别名myAge是量量,也就是说不能通过myAge重新给age赋值

	const int *pi = &age;//*pi是常量指针,不能通过*pi重新给age赋值
	int * const pi1 = &age;//pi1是常量,pi1所存储的地址不能修改

	//下面两行代码等价
	const int * const pi2 = &age;
	int const * const pi2 = &age;
	
	cout << myAge << endl;
	cout << &myAge << endl;

	/*int const &myAge = age;
	cout << myAge << endl;
	cout << &myAge << endl;*/

	/*int & const myAge = age;
	cout << myAge << endl;
	cout << &myAge << endl;*/
	
	/*const int const &myAge = age;
	cout << myAge << endl;
	cout << &myAge << endl;*/

	/*const int & const myAge = age;
	cout << myAge << endl;
	cout << &myAge << endl;*/
	
	return 0;
}


正在回答

2 回答

在声明(定义)时,前面加&代表所声明的变量是引用类型,前面的*代表指针类型。

第一段代码中,为指针赋值时,等号右侧忘了写&。

第二段代码中,声明引用时不能在&后面加上cosnt。 引用原本就是const的。

第三段代码中:

第9行, myAge为const引用,引用的是age变量。没问题。

第11行, pi为指向const int的指针,指向age变量。 没问题。

第12行, pi1为指向int的const指针,指向age变量。 没问题。

第14行, pi2为指向const int的const指针,指向age变量。 没问题。

第15行,其实这样和14行是一样的,单看这语句也没问题,但你重复定义了pi2。这句会报错的,且无法编译通过。


0 回复 有任何疑惑可以回复我~
#1

AidanDai 提问者

谢谢,学习了
2015-10-18 回复 有任何疑惑可以回复我~

引用原本就是const的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

关于&和*运算符的疑惑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信