C 语言 - 指针变量和它的不同表达语法区别以及常量const解析
什么是指针变量
int a = 10; //a 是一个装数的盒子
int *p = &a; //p 是一个写着“盒子放哪儿”的标签
//*p 可以说是披着马甲的a,改动*p,a也会改动
//唯一要注意的是调用*p和p有区别,下面会一一解答
什么是常量const
- 被关键字 const 标记的变量(包括普通变量、指针、结构体等)表示常量化,常量是不能被改变的。
常见的指针使用(修改内容与指向)
int a = 10;
int b = 20;
// 初始化*指针变量时赋值对象必须带&
int *p = &a; //*p 是指针,存的是 a 的地址
*p = 30;     //通过 *p 修改 a 的值
p = &b;      //修改指向 b
*p = 40;     //通过 *p 修改 b 的值
// a == 30; b == 40
p = 0;       //等价于 null ,它不再指向任何地址
//*p 指向地址的内容
// p 指向地址
- 
小扩展: int a = 10; int p = a; //把 p 当成普通变量,它不再指向地址的内容,也无法在后续指向地址,它只是一个普通变量 p = 20; //a == 10;p == 20 //这里 p 根本不是指针,只是普通整型 //它和 a 没有任何关联,修改 p 不会影响 a
指向常量const的指针(内容不能改,地址能改)
int a = 10;
int b = 20;
const int *p = &a; //等价于 int const *p = &a;
*p = 15;  // ❌ 不行,不能改内容
p = &b;   // ✅ 可以改指向
//我能换盒子,但承诺不改盒子里的东西
常量const指针(地址不能改,但能改内容)
int a = 10;
int b = 20;
int *const p = &a;
*p = 15;  // ✅ 可以改 a 的内容
p = &b;   // ❌ 不行,p 不能换指向地址
//认定这个地址一辈子,只能改这个地址的内容
“双保险”常量const指针(既不能改地址,也不能改内容)
int a = 10;
int b = 20;
const int *const p = &a; //双保险
*p = 15;  // ❌ 不行
p = &b;   // ❌ 不行
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号