关于指针常量和常量指针

指针常量和常量指针是两个不同的概念,它们分别描述了指针和指针所指向的内容的常量性质。

一、概念介绍

  1. 指针常量(Pointer to Constant):
    指针常量是指一个指针本身是常量,不能通过该指针修改其所指向的内容。声明方式为在指针类型前加const关键字。
  int* const ptr; 

在这个例子中,ptr是一个指向常量整数的指针,意味着你不能通过ptr来修改所指向的整数的值,但是你可以让ptr指向其他地方。

  1. 常量指针(Constant Pointer):
    常量指针是指指针本身是可以修改的,但不能通过该指针修改其所指向的内容。声明方式为在指针变量名前加const关键字。

    int const *ptr; // 常量整数指针
    
    const int* ptr; 
    

    在这个例子中,ptr是一个常量整数指针,你不能通过ptr来修改指针的值,但是你可以通过其他途径修改所指向的整数的值。

需要注意的是,上述两者的差异在于指针本身的常量性质。如果既不希望修改指针的值,也不希望修改指针所指向的内容,可以将const同时放在类型和指针变量名之前:

const int *const ptr; // 常量整数指针常量

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

二、示例代码

让我们看一些具体的例子:

  1. 常量指针:
#include <iostream>

int main() {
    int x = 10;
    const int*  ptr; 

    ptr = &x; // 合法,可以指向常量
    // *ptr = 20; // 错误,不能通过指针修改所指向的内容

    std::cout << "Value pointed by ptr: " << *ptr << std::endl;

    return 0;
}

在这个例子中,ptr是一个指向常量整数的指针,你可以使用它来访问 x 的值,但不能通过它来修改 x 的值。

  1. 指针常量:
#include <iostream>

int main() {
    int x = 10;
    int y = 20;
    int* const ptr = &x; // 常量整数指针

    // ptr = &y; // 错误,不能修改指针的值
    *ptr = 30; // 合法,可以通过指针修改所指向的内容

    std::cout << "Value of x: " << x << std::endl;

    return 0;
}

在这个例子中,ptr是一个常量整数指针,你不能修改指针 ptr 的值,但可以通过 ptr 修改其指向的内容。

  1. 常量整数指针常量:
#include <iostream>

int main() {
    int x = 10;
    const int* const ptr = &x; // 常量整数指针常量

    // ptr = &y; // 错误,不能修改指针的值
    // *ptr = 30; // 错误,不能通过指针修改所指向的内容

    std::cout << "Value pointed by ptr: " << *ptr << std::endl;

    return 0;
}

在这个例子中,ptr是一个常量整数指针常量,既不能修改指针的值,也不能通过指针修改其指向的内容。

三、如何区分常量指针和指针常量

答:就看const关键字位于*号的左边还是右边;
如果位于左边,如const int*a,则为常量指针;
如果位于右边,如int*const b,则为指针常量;

在这里插入图片描述
注:上图来源于https://www.cnblogs.com/lizhenghn/p/3630405.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值