我们先来看指针常量和常量指针的区别,在c++中代码表示如下
#include<iostream>
using namespace std;
int main()
{
int a=10;
int b = 20;
int c = 30;
const int *p1 = &a;//常量指针
int *const p2 = &b;//指针常量
*p2 = 60;
cout<<*p1<<endl;
cout<<*p2<<endl;
}
如上所示,对于一般常量,基本都是固定的,不能再赋值,同理,常量指针可以表示*p1不能再赋值,我们可以试着将常量指针将其赋值下,如下代码
在vscode上运行将*p1赋值报错,报错说*p1只度状态,也就是值不变,那我们再试下改变a值看下
可见没问题,我们再试下改变指向
#include<iostream>
using namespace std;
int main()
{
int a=10;
int b=20;
const int *p1 = &a;
p1 = &b;
cout<<*p1<<endl;
}
结果如下
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima> cd "c:\Users\14499\Desktop\vscodeProject\cpp_heima"
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima> & .\"demo1.exe"
20
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima>
完全没问题,我们再来看下指针常量,同样按照如上操作,发现将其改变指向报错
#include<iostream>
using namespace std;
int main()
{
int a=10;
int b=20;
int *const p1 = &a;
p1 = &b;
cout<<*p1<<endl;
}
结果如下所示
[demo1.cpp 2022-10-27 15:25:36.784]
,,demo1.cpp: In function 'int main()':
demo1.cpp:11:8: error: assignment of read-only variable 'p1'
p1 = &b;
由此可见我们可以得出结论,常量指针中值不可以变,指向可以变,而指针常量中指向不能变,值可以变,我们再来看下引用,和他们有什么区别,c++中的引用也就是给变量取个别名,注意的是取了个别名,这个别名就不能再引用别人了,我们用代码测试下
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int &b = a;
cout<<b<<endl;
}
结果如下所示
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima> cd "c:\Users\14499\Desktop\vscodeProject\cpp_heima"
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima> & .\"demo1.exe"
10
PS C:\Users\14499\Desktop\vscodeProject\cpp_heima>
其次发现引用必须要初始化,那就还好了,引用的本质就是指针常量了,指向不能变,且必须初始化!
点击此处登录后即可评论