孙Cloud的C语言学习博客-10-指针

在这插个眼!传送…这篇是关于指针部分学习的总结理解!!!从今天开始,一切又恢复正常了,冲冲冲!

  • 指针(pointer)
    指针就是一个地址的形象化,用一个变量也就是指针来形象的,描绘存放内存单元的地址!说白了,你移动指针,也就是在移动地址
    关于指针的大小:在32位平台上他的大小为4个字节,64位则为8个字节!

  • 指针与指针类型
    char* p 或者 int* p 这为指针类型int与char, 这pc=0为 “解引用操作”!
    虽然指针的大小是固定的,但是指针类型并不是无用的,指针类型决定了指针进行解引用操作的时候,能够访问空间的大小、
    如 int
    p 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 ;

猜你喜欢

转载自blog.csdn.net/weixin_44719191/article/details/108132902
今日推荐