c/c++中const关键字用法,以及如何区分指针常量和常量指针实例

本文详细解析了C/C++中const关键字的使用,包括区分常量指针(int const *n)和指针常量(int *const n)的方法。常量指针不可通过指针改变变量值,但可指向其他地址;指针常量本身不可改变指向,但其指向的变量值可变。通过示例代码演示了const在不同情况下的应用,如修饰局部变量、函数参数等。
摘要由CSDN通过智能技术生成

c/c++中const关键字用法,以及如何区分指针常量和常量指针实例:

C/C++在线编译连接

本文参考文献:C语言中const关键字的用法

一、区分常量指针和指针常量的方法:

    区分常量指针和指针常量的关键就在于星号的位置,我们以星号为分界线,如果const在星号的左边,则为常量指针,

    如果const在星号的右边则为指针常量。如果我们将星号读作‘指针’,将const读作‘常量’的话,内容正好符合。

    int const * n;是常量指针,int *const n;是指针常量。

二、const用法:简单来说起不变作用;

    1)修饰局部变量,则局部变量的值不变;

    2)常量指针:*不可通过改变指针改变变量的值(常量指针指向的值不能被改变);

                         *注意:但可直接对变量进行赋值改变,或常量指针可以指向其他的地址;

    3)指针常量:*指针本身是个常量,不能指向其他地址;

                         *注意:但地址中保存的数值是可以改变的,可以通过其他指向改变地址的指针来修改;

    4)修饰函数的参数:

                        4.1)防止修改指针指向的内容:用常量指针

                        4.2)防止修改指针指向的地址:用指针常量

                        4.3)以上两种结合;

    5)修饰函数的返回值:

    6)修饰全局变量:

    ps:4.5.6点看参考文献讲解(很明确,不做说明)

#include <iostream>
using namespace std;
/**************************************************************************
一、区分常量指针和指针常量的方法:
    区分常量指针和指针常量的关键就在于星号的位置,我们以星号为分界线,如果const在星号的左边,则为常量指针,
    如果const在星号的右边则为指针常量。如果我们将星号读作‘指针’,将const读作‘常量’的话,内容正好符合。
    int const * n;是常量指针,int *const n;是指针常量。
    参考文献:https://blog.csdn.net/xingjiarong/article/details/47282255
二、const用法:简单来说起不变作用;
    1)修饰局部变量,则局部变量的值不变;
    2)常量指针:*不可通过改变指针改变变量的值(常量指针指向的值不能被改变);
               *注意:但可直接对变量进行赋值改变,或常量指针可以指向其他的地址;
    3)指针常量:*指针本身是个常量,不能指向其他地址;
               *注意:但地址中保存的数值是可以改变的,可以通过其他指向改变地址的
                      指针来修改;
    4)修饰函数的参数:
                4.1)防止修改指针指向的内容:用常量指针
                4.2)防止修改指针指向的地址:用指针常量
                4.3)以上两种结合;
    5)修饰函数的返回值:
    6)修饰全局变量:
    ps:4.5.6点看参考文献讲解(很明确,不做说明)
***************************************************************************/
#if 1
/*eg1.10,const方法1,2 修饰局部变量,常量指针 用法实例*/
int main(){
    /*const int a=5;//假设直接将变量a设置为const(不变),则后面的a=6;语句将进行报错*/
    /*这里说明了被const修饰的局部变量,不可被改变*/
    
    int a=5;
    int b=10;
    const int* n=&a;//常量指针,指针指向的地址不变
    cout << n << endl;//指针地址不发生改变
    cout << *n << endl;//5
    
    //*n=10;//不可通过改变指针改变变量的值,否则会报错(常量指针指向的值不能被改变)
    
    a=6;//但可对变量直接赋值,使a的值发生改变
    cout << n << endl;//指针地址不变
    cout << *n << endl;//6

    /*需注意这里是常量指针,可以指向其他地址,而指针常量不能*/
    n=&b;//常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。
    cout << n << endl;//指针地址发生改变
    cout << *n << endl;//10
    return 0;
}
#endif

#if 0
/*eg1.10,const方法3 指针常量 用法实例*/
int main()
{
    int a = 5;
    int b = 10;//下文测试用的
    int *p = &a;
    cout << p <<endl;//输出p的地址(指向变量a)-----你会发现和后文的地址相同
    /*意味着地址未发生改变*/
    cout << *p << endl;//输出*p的值为5

    int *const n = &a;//指针常量:指针本身是个常量(不能指向其他地址)
    cout << n <<endl;//地址不变
    cout << *n << endl;//5

    //n=&b;//这里报错,n为指针常量,不能指向其他地址

    *p = 8;//但指针常量所在地址中,保存的数值可以改变
    cout << p <<endl;//地址不变
    cout << *p << endl;//8
    return 0;
}
#endif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值