C语言const修饰指针场景demo

  • A+
所属分类:C和C++

#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");
}

w3cjava

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: