指针 重点干货2

小伙伴们,如果没有看指针重点干货1的,可以去我博客看那篇,再看这篇哦~

目录

六.空间大小

七.解引用访问字节

八.void*指针

九.const修饰指针

十.野指针

1.指针变量没有初始化

2.指针越界访问

3.避免返回局部变量的地址

4.注意开辟的指针释放后要归为空指针

十一.重难点分析2

十二.指针数组和数组指针

十三.函数指针

十四.指针宝藏(这世界总有人在忙忙碌碌寻宝藏~~)

例1.

例2.

例3.

例4.

例5.

例6.

十五.自己练练手吧~~

例2.

例3.

例4.

例5.


六.空间大小

任何指针变量,指针类型的大小都是4或8,只是取决于不同环境,

如果是32位环境下,那就是4,

如果是64位环境下,那就是8

七.解引用访问字节

指针的类型决定了指针解引用时访问几个字节

所以注意char*的指针,解引用就只能访问1个字节
       int*的指针,解引用就只能访问4个字节

八.void*指针


注意:

void*指针可以用来接收任何类型的指针,但是不可以用来解引用,不可以用来指针的运算

因为void*,是无具体类型的指针,如果给它解引用,并不知道访问几个字节

包括加减操作,也是并不知道向后访问几个字节

所以void*指针只可以用来存放其他地址

             eg.

               

九.const修饰指针

const之后的变量是不可再改变的,因为这个变量具有了常属性

eg.

 const int a=10;
 a=20;  //err

 int a=10;
 int b=20;
 int const*p=&a;
 p=&b;            //没错,正确   因为是*p具有了常属性,而不是p,他俩含义不同,分别代表指针指向的值和指针所指向的地址
 *p=100;    //err   因为有了const,所以不能改变指向地址解引用后的值,即*p,因为它已具有了常属性,不能改变


 int a=10;
 int b=20;
 int *const p=&a;
 p=&b;      //err
 *p=200;   //正确,没错,原因是:因为const,所以不能改变p的值(即不能改变它指向的地址),但是可以改变p所指向的值(即 *p)
 printf("%d\n",a);

十.野指针

造成野指针的原因

1.指针变量没有初始化

2.指针越界访问

3.避免返回局部变量的地址

4.注意开辟的指针释放后要归为空指针

十一.重难点分析2

十二.指针数组和数组指针


  (1)指针数组
本质是数组,只不过里面所存放的元素为指针,是存放指针的数组
整形数组:数组里面存放的是整数  

字符数组:数组里面存放的是字符    
指针数组:数组里面存放的是指针 eg.int* arr[6],char* arr[3]

(2)数组指针
本质是指针,
字符指针:指向字符的指针

整形指针:指向整形的指针 
数组指针:指向数组的指针

写法:int (*pa)[10] = &arr

十三.函数指针


函数指针变量:专门用来存放函数地址的变量
eg.  pf = &add  pf里面存放的是函数add的地址
但是这种写法不规范,就像数组指针一样,他代表指向数组的指针,那么函数指针是指向函数的指针
那么就得写成:   int(*pf)(int,int) = &add  或 char* (*p)(char,int) = &test

十四.指针宝藏(这世界总有人在忙忙碌碌寻宝藏~~)

举例来证明即可:

例1.

还有注意这个48是怎么算的?是通过转换成十进制来计算的

例2.

例3.

例4.

例5.

例6.

十五.自己练练手吧~~

例1.

例2.

例3.

例4.

例5.

写作不易,若有疑问,请各位大佬指教,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦麦在写代码

谢谢好大爹们请我喝奶茶啊啊啊啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值