最近在看指针和引用的区别。引用本质上是指针常量,所以我想做几个实验看能不能接近下引用。
#include <iostream>
using namespace std;
int main()
{
int a=10;
int * const p1=&a; //用一个指针常量指向a,注意p1的指向不会再变了,就类似于引用
//同时可以用p1去改变a的值
int b=0;
//p1=&b; //报错,因为已经指向了a的地址
*p1=90; //可以用p1去修改
cout<<a<<endl; //输出90
int *const p2=nullptr; //可以为空,因为这本质上还是指针,不是引用,编译器为引用做了很多事情
return 0;
}
我突然想起来面试的时候别人问我,引用一旦初始化就不能改变,不能改变的是什么,是指向的值还是地址。从上面的实验可以看出,引用不能改变的是指向的地址,引用所指向的值是可以变的。由此我又想到了指针的一些定义,如下:
#include <iostream>
using namespace std;
int main()
{
int a=10;
int const *p=&a; //int const 和const int是一样的
const int *p2=&a;
//*p=20; //两个都报错,因为已经定义了指针p1,p2。p1,p2所指向的是int常量
//*p2=20; //所以无法通过指针修改
a=30;//但可直接修改a,因为a本质上是变量,只是你在定义指针的时候告诉指针指的是常量
cout<<a<<endl;
int b=10;
const int *const p3=&b; //指向常量的指针常量
int c=20;
//p3=&c; //错误,因为p3是指针常量
//*p3=40; //错误,无法通过p3去修改值
b=90; //可以
cout<<b<<endl;
return 0;
}
基本的小实验就这些了,我想起来其他的再补充。