辨析:指向常量的指针、指针常量、指向常量的指针常量

初学c语言,对《常量与约束》篇幅看完似懂非懂,实属难受。下面对该知识进行梳理:

指向常量的指针

用const约束指针对所指对象访问时,该指针就是指针向常量的指针

目的:约束所指对象的访问(所指对象值不能修改,指针可修改

定义方式

  • const 类型 *指针;

  • 类型 const *指针;

代码例子

#include  <stdio.h>
#include "iostream"

using namespace std;

int main() {
    // >>>>>>>>>>>>>>> 指向常量的指针 >>>>>>>>>>>>>>>
    int var = 35;         // 变量
    const int MAX = 1000; // 常量
    int *p;               // 普通指针
    const int *p1_const;  // 指向常量的指针
    const int *p2_const;  // 指向常量的指针
    p1_const = &var;      // 指向常量的指针 可以指向非常量(地址)
    p2_const = &MAX;      // 指向常量的指针 可以指向常量(地址)
    cout << *p1_const << endl;
    cout << *p2_const << endl;

    // 错误演示:指向常量的指针 不可以修改对象,但能读取对象
    // *p1_const = 100; // 指向常量的指针 指向的对象不修改
    // *p2_const = 200; // 指向常量的指针 指向的对象不修改
    // p=&MAX;          // 指向常量的指针 不能赋给普通指针

    // 可以读 指向常量的指针指向的对象
    var = *p1_const + *p2_const;
    cout << var << endl;

    // <<<<<<<<<<<<<<< 指向常量的指针 <<<<<<<<<<<<<<<
}

指针常量

指针常量:指针变量的值,只能在定义的时候初始化,定义之后不能修改(即是不能改变指针变量的指向),但不影响所指对象的访问特性

目的:约束指针变量的值,使指针变量为“只读”(指针指向不可改,对象可改

定义方式

  • 类型 *const 指针

代码例子

#include  <stdio.h>
#include "iostream"

using namespace std;

int main() {
    // >>>>>>>>>>>>>>> 指针常量 >>>>>>>>>>>>>>>
    // 语法:
    // 类型  *const 指针;
    // 说明:指针常量,仅仅约束指针值为只读,并没有约束间址访问对象(指针不可改,对象可改)
    cout << "指针常量" << endl;
    int var1 = 100, var2 = 200;
    int *const const_P1 = &var1;  // 定义指针常量时初始化,之后指针不能修改了
    cout << *const_P1 << endl;
    // const_P1 = &var2;  // 错误:指针常量初始化之后指针就不能修改了
    *const_P1 = var2;     // 错误:指针常量初始化之后指针不能修改,但可以修改所指对象值
    cout << *const_P1 << endl;

    // 错误演示:const_P2是一个指针常量,仅仅约束指针值为只读,并没有约束间址访问对象(修改对象)
    // const int MAX = 1000;
    // int *const const_P2=&MAX;

    // <<<<<<<<<<<<<<< 指针常量 <<<<<<<<<<<<<<<
}

指向常量的指针常量

指向常量的指针常量:指针本身所指对象的值在定义之后都限制为只读,不能写。

目的:约束指针本身所指对象的访问(指针和所指对象均可读不能写)

定义方式

  • const 类型 *const 指针;

  • 类型 const *const指针;

代码例子

#include  <stdio.h>
#include "iostream"

using namespace std;

int main() {

    // >>>>>>>>>>>>>>> 指向常量的指针常量 >>>>>>>>>>>>>>>
    // 语法:
    // 类型 const 类型 *const 指针;
    // 类型 *const const 指针;
    // 说明:指向常量的指针常量,指针本身和所指对象的值在定义之后都限制为只读,不能写(指针、对象均不可改)

    int var=128,other_value=256; // 普通变量var、other_value
    const int MAX=1000;  // 常量MAX
    const int *const double_P1=&var; // 定义指针常量double_P1
    const int *const double_P2=&MAX; // 定义指针常量double_P2
    // 错误演示
    // double_P1 = &other_value; // 错误,不能写指针常量
    // *double_P2 = 500;         // 错误,不能写指向常量的指针常量
    var = other_value;        // 正确,不影响变量的读和写

    // <<<<<<<<<<<<<<< 指针常量 <<<<<<<<<<<<<<<
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值