小伙伴们,如果没有看指针重点干货1的,可以去我博客里先看那篇,再看这篇哦~
目录
六.空间大小
任何指针变量,指针类型的大小都是4或8,只是取决于不同环境,
如果是32位环境下,那就是4,
如果是64位环境下,那就是8
七.解引用访问字节
指针的类型决定了指针解引用时访问几个字节
所以注意char*的指针,解引用就只能访问1个字节
int*的指针,解引用就只能访问4个字节
八.void*指针
注意:
void*指针可以用来接收任何类型的指针,但是不可以用来解引用,不可以用来指针的运算
因为void*,是无具体类型的指针,如果给它解引用,并不知道访问几个字节
包括加减操作,也是并不知道向后访问几个字节
所以void*指针只可以用来存放其他地址
eg.
九.const修饰指针
const之后的变量是不可再改变的,因为这个变量具有了常属性
eg.
const int a=10;
a=20; //errint 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.
写作不易,若有疑问,请各位大佬指教,谢谢!
标签:const,字节,指向,int,干货,数组,重点,指针 From: https://blog.csdn.net/2301_79978195/article/details/142794481