const 修饰指针和修饰指针指向的对象的差别

在 C 语言中,const 关键字可以用于修饰指针本身(即指针变量)或者指针指向的对象(即指针所指向的内存区域中的数据)。理解这两种用法之间的差别是非常重要的。

  1. 修饰指针本身(指针常量)
    当 const 修饰指针本身时,这个指针的值(即它所存储的地址)在初始化之后就不能被改变。这种指针被称为“指针常量”或“常指针”。

    int x = 10;  
    int *const ptr = &x; // ptr 是一个指针常量,指向 x 的地址  
    // ptr = &y; // 错误:不能改变 ptr 的值

    在上面的代码中,ptr 是一个指针常量,它指向变量 x 的地址。尝试改变 ptr 的值(比如让它指向另一个变量 y 的地址)将会导致编译错误。但是,我们可以通过 ptr 来修改它所指向的对象 x 的值。

  2. 修饰指针指向的对象(常量指针)
    当 const 修饰指针指向的对象时,这个指针可以用来指向一个常量对象(即该对象的内容不能被修改)。这种指针被称为“常量指针”或“指向常量的指针”。

    const int y = 20;  
    const int *p = &y; // p 是一个常量指针,指向一个常量整数  
    // *p = 30; // 错误:不能通过 p 修改 y 的值

    在上面的代码中,p 是一个常量指针,它指向一个常量整数 y。尽管 p 本身的值(即它所存储的地址)可以被改变以指向其他常量整数,但是尝试通过 p 来修改它所指向的对象 y 的值将会导致编译错误。

  3. 同时修饰指针和指针指向的对象
    当然,你也可以同时用 const 修饰指针本身和指针指向的对象。

    const int z = 30;  
    const int *const q = &z; // q 是一个指针常量,指向一个常量整数  
    // q = &anotherVar; // 错误:不能改变 q 的值  
    // *q = 40; // 错误:不能通过 q 修改 z 的值

    在这个例子中,q 是一个指针常量,指向一个常量整数 z。既不能改变 q 的值,也不能通过 q 来修改 z 的值。

理解这些差别对于编写健壮且安全的 C 代码至关重要。在编写函数接口时,正确地使用 const 可以帮助避免意外的数据修改,从而提高代码的可读性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值