在这插个眼!传送…这篇是关于指针部分学习的总结理解!!!从今天开始,一切又恢复正常了,冲冲冲!
-
指针(pointer)
指针就是一个地址的形象化,用一个变量也就是指针来形象的,描绘存放内存单元的地址!说白了,你移动指针,也就是在移动地址
关于指针的大小:在32位平台上他的大小为4个字节,64位则为8个字节! -
指针与指针类型
char* p 或者 int* p 这为指针类型int与char, 这pc=0为 “解引用操作”!
虽然指针的大小是固定的,但是指针类型并不是无用的,指针类型决定了指针进行解引用操作的时候,能够访问空间的大小、
如 intp p能访问四个字节 / charp p能访问一个字节,而doublep能访问八个字节!因此在指针进行加减一个整数时,不同的指针类型也决定了指针加一后指针能走多远,即intp;p+1后向后移动4个字节在内存单元中11 22 33 44>>00 00 00 00 而charp 11 22 33 44>> 00 22 33 44!!! -
野指针
在使用指针时出现的大部分错误都是野指针造成的!即指针指向的位置不可知,随机,不可控。
造成野指针有三个常见的原因
1.指针未初始化
当局部变量不初始化时,默认赋予的是随机值 //int a ;
因此局部的指针变量,也会被初始化为随机值 //int *p ;
2.指针越界访问
当数组定义的内存大小只有10个大小时即arr[10],指针却访问到了12+以后,这时就出现了指针越界的问题,造成野指针
3.指针指向的空间被释放
当函数中的局部变量定义以后,使用完会将局部变量的内存还给计算机内存,因此在局部变量中的指针归还给计算机后,这个指针指向的位置就是不可知的,也是不可控的。 -
如何规避野指针呢?
1.给指针初始化
在当你不知道初始化什么时,就使用int* p = NULL;来初始化,用NULL来给指针赋值。
2.小心指针越界
3.指针指向空间释放使置为NULL
4.指针使用之前检查指针有效性 -
指针的运算
1.指针±整数
2.指针-指针 : arr[10]={1,2,3,4,5,6,7,8,9,10} &arr[9]-&arr[0] :指针减指针的含义就是得到中间元素的个数。
3.指针之间的关系比较:在指针指向数组元素时,只能和指向数组后面的元素比较,不能与之前的元素比较。 -
二级指针与指针数组
int** ppa = &pa // 即为二级指针 int* pa =&a;
指针数组就是存放指针的数组
int * arr[10]={&a,&b,&c}; -
孙浩小笔记
-
模拟实现strlen函数(即求字符串长度的函数)
方法1 计数器方法
方法2 递归的放法
方法3 :
int my_strlen (char* str) >>arr[]=“bit”
char* start = str ;
char* end = str;
while (*end != “0”)
{
end++;
}
return end-start ;