目录
一、指针变量、取地址操作符、解引用操作符
1.新建变量——>在内存开辟一个空间——>每个空间在内存中都有独一无二的地址编号(指针)
2.指针变量:存放着某个变量的地址 的变量
3.指针变量的类型:取决于 存放的变量地址 的 该变量的类型
int a = 10; //新建一个变量,=开辟内存地址号
&a; //&取地址符
int* zhi1 = &a;//创建一个指向int类型的指针变量,用于存放取来的地址
*zhi1; //解引用操作符,顺藤摸瓜回去*zhi1——>a——>10,此时就是变量a
*zhi1 = 0; //*zhi1=a,所以可以进行对a变量的另一种赋值方法,此时输出a=0
二、void*类型的指针变量
提到void,编程人肯定想到无返回值
同理,void*类型的指针变量,就是无具体类型的指针变量,可以用来存放任意类型的指针/地址
但是 不具备 任何修改a变量值 的作用
int a = 10; //新建一个变量,=开辟内存地址号
void* zhi2 = &a;//无具体类型的指针,只可以存放任意类型的指针,但是不具备赋值作用
*zhi2 = 0 //error
*zhi2 =a+1; //error
//void是没有类型的,所以系统不知道要访问多少个字节
//一般使用在函数传参
三、const:赋予 变量 常量的属性
1、const第一种情况,const就是赋予常量的属性
const int b = 10;//此时b具有常量的属性,不能再单纯的通过直接变量修改
b = 19; //error
int* zhi3 = &b;
*zhi3 = 10; //但可另辟蹊径,用解引用指针顺藤摸瓜修改
//最为直观地就是,创建数组时,vs要求的数组下标里要求放的是一个常量,此时我们用const修饰的b变量作为下标,就会报错
//const仅仅是在语法上,限制了b变量被赋予了一个常属性
//b只是具有变量的属性,但是本质上仍然是一个变量
2.const第二种情况,指针变量 *后
int a=0;
int* const p = &a;//p是地址变量
p = &b; //error //p这个指针变量不能被赋其他地址的值
*p = 10;//但仍然可以用解引用去修改p指针变量指向的a变量的值
3.const第三种情况,指针变量 *前
int b=0;
int const * x = &b;
*x = 19;//error //Const会限制变量不能再使用解引用操作符去给指向的变量赋值
x = &c; //但是允许对指针(地址)变量,进行重新赋值一个地址
4.const第四种情况,*前*后,全限制住
int b=10;
int const * const x = &b;
x=&a; //error
*x=123;//error
我的理解:const修饰谁 谁不能改值 但凡事总有例外
正在学习中,如有错误,虚心接受