C++中指针常量和常量指针以及引用的区别与联系

2022年10月27日 23:31 ry 54

我们先来看指针常量和常量指针的区别,在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>

其次发现引用必须要初始化,那就还好了,引用的本质就是指针常量了,指向不能变,且必须初始化!

欢迎发表评论~

点击此处登录后即可评论


评论列表
暂时还没有任何评论哦...

赣ICP备2021001574号-1

赣公网安备 36092402000079号