码迷,mamicode.com
首页 > 其他好文 > 详细

指针(1)

时间:2019-05-24 23:52:41      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:最小   意义   安全   函数   种类   必须   需要   拷贝   危险性   

指针
(1)什么是指针:指针是一种数据类型(整数),这种类型定义出的变量叫指针变量(简称指针)。
内存的每个字节都有一个编号,指针变量中存储的就是这种整数
1bit 最小的可用单位,能储存1或0,
1byte =8bit
1kb =1024byte
1mb=1024kb
1gb=1024mb
1tb=1024gb
1pb=1024tb
(2)为什么使用指针:用堆、优化传参、共享变量
1、堆内存不能与标识符(变量名)建立联系,必须和指针配合才能使用堆内存
2、函数的传参是值传递(内存拷贝),如果只传递变量地址(4byte)可以做到传参的目的
3、函数之间命名空间相互独立,当需要共享变量时只能用全局变量(不宜过多使用),而传递变量的地址也能达到共享变量的目的
注意:指针具有一定危险性。
(3)如何使用指针
1、定义指针变量:类型* 变量名_p;
《1》指针变量的用法与普通变量不同,通过名字区分
《2》指针变量与普通变量一样初始值不确定,一般初始化NULL(空指针)
《3》指针变量只储存一个字节的内存编号,当通过指针变量访问内存时由指针类型决定
《4》不能连续使用指针变量
int p1,p2;//p1指针,p2普通的int类型
2、为指针变量赋值:指针变量=内存编号
p=&unm;把栈内存的地址赋值给指针变量
p=malloc(4);把堆内存的地址赋值给指针变量
注意:如果指针变量的储存地址是非法的则访问内存时就会产生段错误
3、通过指针变量访问内存(解引用):
指针变量
注意有两种意义:定义指针变量时表示变量身份,其他情况下表示对指针进行解引用
*p<->num//等价
printf %p
使用指针要注意的问题
(4) 空指针:指针变量的值为NULL,我们把这种指针称为空指针,空指针也是一种错误标志,当一个函数的返回值为NULL表示执行错误
注意:对空指针解引用会引发段错误,在大多数系统下NULL就是0地址,而0地址储存的是复位时的一些数据
如何杜绝空指针导致的段错误
对来历不明的指针(函数参数)进行解引用时要先判断是否为NULL

        野指针:指针变量中储存的数值不确定
           后果:一切正常,段错误,脏数据
         注意:使用野指针不一定出错误,但是其空指针更严重,因为野指针无法判断出(只能通过代码分析)
         如何避免野指针:所有野指针都是人制造出来的,不制造野指针
          1、定义指针要初始化
          2、函数不返回局部、块变量的地址
          3、当一块堆内存被释放后,指向他的指针应该立即置空。
        (5) 指针的运算 
          注意:指针变量中储存的就是代表内存编号的整数
          整数能使的运算符指针变量理论上来说应该都可以使用,不是都有意义
           指针+整数=指针+类型宽度*整数          
           指针-整数=指针-类型宽度*整数 
           指针-指针=(指针-指针)/类型宽度
           指针加减一个整数相当于前后移动,指针-指针可以计算出两个指针之间相隔多少元素
           指针==,!=,<,>,<=,>=指针,判断出指针的前后位置关系。
          (6)指针与数组
               数组名就是一种特殊的常指针,他与数组元素的首地址对应关系(指针是指向关系)。
               因为数组名就是指针所以可以使用指针语法,而指针可以使用数组的语法。
               *(p+i)《=》p[i]
               arr与&arr的区别,
                    arr类型:int*;
                    &arr类型:int(*arr)【5】数组指针:专门指向数组的指针    指针数组:由指针变量组成的数组,如:int*arr【5】;
          (7)指针与const:
                  const int*p;保护的是指针变量所指向的内存,不能通过解引用来修改内存中的数据,解决提高传递效率带的安全隐患。
                  int const*p;同上
                  int* const p;保护指针变量的值不被显示修改
                   可以防止变成野指针
                    const int* const p:既保护指针变量又保护指针所指向的内存
                    int const*const:同上

指针(1)

标签:最小   意义   安全   函数   种类   必须   需要   拷贝   危险性   

原文地址:https://www.cnblogs.com/zhangjinguang/p/10920654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!