C语言const修饰指针场景demo

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

// const修饰其后的内容,const靠近谁就修饰谁

// const使用场景二:const char* p
// const 修饰的是指针变量所指向的内存空间, 所指向的内存空间不能被修改
// 可以修改指针变量p的值,p所指向的内存空间是不能被修改,否则,编译error
void test(const char* p) {
    //p[0] = 'a';  //error: 错误左值指定 const 对象
    p++;
}

// const使用场景三:char* const p
// const修饰的是指针变量,告知编译器是常量指针
// 指针变量不能被修改,指针变量所指向的内存空间是可以被修改的。
void test1(char* const p){
    p[0] = 'a';
    //p++; //error: 错误左值指定 const 对象
}

// const使用场景四:const char* const p
// const修饰的是指针变量和指针变量所指向的内存空间
// 指针变量和指向的内存空间都不能被修改
void test2(const char* const p) {
    //p[0] = 'a'; // error
    //p++; //error: 错误左值指定 const 对象
}

void main() {

    //const使用场景一:const int xx <==> int const xx
    // 特例 const int xx <==> int const xx
    const int a; // <==> int const a;
    int const b; // <==> const int b;

    /*
    * 指针变量和它所指向的内存空间,是两个不同的概念
    * 看const是放在*的左边还是右边,看const是修饰指针变量,还是修饰所指向的内存空间变量
    */

    const char* c;  // const 修饰的是指针变量所指向的内存空间, c所指向的内存空间不能被修改
    char* const d;  // const 修饰的是指针变量d,   d是一个常量指针
    const char* const e;

    {
        // 为什么C++编译器把数组变量定义为常量指针? 因为如果修改了a指针的值,C++就找不到分配内存空间的首地址了,就无法释放内存
        int a[10]; // a是一个指针==>a是常量指针 为什么C++编译器把数组变量定义为常量指针。
        //a++; // error
        // C++编译器要拿着a去析构内存,为了避免你把a的指向改变。
    }


    system("pause");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值