备考路上,目前还有点绕的指针必须拿下

目录

一、指针变量、取地址操作符、解引用操作符

二、void*类型的指针变量

三、const:赋予 变量 常量的属性


一、指针变量、取地址操作符、解引用操作符

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修饰谁 谁不能改值 但凡事总有例外

正在学习中,如有错误,虚心接受

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值