#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");
}
C语言const修饰指针场景demo
最新推荐文章于 2023-03-28 17:52:21 发布