常量指针与指针常量

理解常量指针与指针常量
constant
*前面的是对被指向对象的修饰,*后面的是对指针本身的修饰

常量指针(被指向的对象是常量)
定义:
又叫常指针,可以理解为常量的指针,指向的是个常量

关键点:

  1. 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改

  2. 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;

  3. 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址; 
    代码形式:

    int const* p; const int* p;
    //
    // Created by zhangrongxiang on 2018/3/25 22:16
    // File constant4
    //
    #include <stdio.h>

    // 常量指针(被指向的对象是常量)
    int main() {
            int i = 10;
            int i2 = 11;
            const int *p = &i;
            printf("%d\n", *p);//10
            i = 9; //OK,仍然可以通过原来的声明修改值,
            //Error,*p是const int的,不可修改,即常量指针不可修改其指向地址
            //*p = 11;  //error: assignment of read-only location ‘*p’
            p = &i2;//OK,指针还可以指向别处,因为指针只是个变量,可以随意指向;
            printf("%d\n", *p);//11
            return 0;
        }
    

指针常量(指针本身是常量)
定义:
本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。

关键点:
它是个常量!
指针所保存的地址可以改变,然而指针所指向的值却不可以改变;
指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;
代码形式:

    int* const p;
    //
    // Created by zhangrongxiang on 2018/3/25 22:30
    // File constan5
    //

//指针常量(指针本身是常量)

    #include <stdio.h>
    
    int main() {
        int i = 10;
        int *const p = &i;
        printf("%d\n", *p);//10
        //Error,因为p是const 指针,因此不能改变p指向的内容
        //p++;//error: increment of read-only variable ‘p’
        (*p)++;    //OK,指针是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
        printf("%d\n", *p);//11
        i = 9;//OK,仍然可以通过原来的声明修改值,
        return 0;
    }

指向常量的常指针
定义:
指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。

关键点:
一个指针常量,指向的是一个指针对象;
它指向的指针对象且是一个常量,即它指向的对象不能变化;
代码形式:

const int* const p;
//
// Created by zhangrongxiang on 2018/3/25 22:38
// File constant6
//
#include <stdio.h>

int main() {
    int i = 10;
    const int *const p = &i;
    printf("%d\n", *p);//10
    //p++;//error: increment of read-only variable ‘p’
    //(*p)++;//increment of read-only location ‘*p’
    i++;//OK,仍然可以通过原来的声明修改值
    printf("%d\n", *p);//11
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值