const 修饰指针的问题

本文详细解析了C/C++中const关键字如何修饰指针及所指向的变量,并通过实例演示了不同情况下const的位置对指针行为的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const 修饰指针的问题

判断法则

沿着*号划一条线:

  • 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量
  • 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量

验证

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a = 1;
    int b = 2;

    /*const int XX 与 int const XX 等价*/
    const int* p1 = &a;
    printf("%d",*p1);
    //*p1 += 1; ERROR const此时修饰指向的内容,无法修改常量
    p1 = &b;// OK const 此时不修改指针,故指针本身值可变
    int const *p2 = &b;
    //*p2 += 1; ERROR 无法修改常量
    p2 = &a; //OK const 此时不修改指针,故指针本身值可变

    /*const 修饰指针本身*/
    int* const p3 = &a;
    *p3 += 1; // OK p3本身是常量不可变,但是可以修改所执行的内容
    //p3 = &b; ERROR 无法修改p3本身,因为p3本身是常量

    const int* const p4 = &b;
    //*p4 += 1; ERROR 指向的内容被修饰为常量
    //p4 = &a; ERROR 指针本身值也被修饰为常量

    //const (int*) p = &a; syntax error
    //(int*) const p = &b; syntax error

    return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值