zoukankan      html  css  js  c++  java
  • C/C++

    一、指针

      1、指针与指针变量的区分

        a、指针:指针就是内存编号,也就是内存地址,通俗的讲,指针就是变量的地址。

          注1:指针的大小是根据计算机的操作系统而定的,跟变量类型无关

          注2:如果是32位的操作系统,那么在定义一个指针时,指针的大小为4字节,而64位的指针大小为8字节,

        b、指针变量:指针变量顾名思义,就是可以在地址(指针)中存储的变量。

          注1:存储的变量,不是指针地址,因此存储的数据与定义变量的类型有关

          注2:指针是一种类型,指针变量是一种变量,就好比 int   和 (int  j 中的j)的区别

      2、指针的作用

        a、函数与函数之间共享变量

            为什么需要共享变量:因为不同函数之间命名空间独立,如果只是值传递的话,不能解决函数之间值的”沟通问题“,这是就需要传递地址共享变量

        b、优化函数与函数之间的数据传递

            原因:如果通过值传递时数据过大比如ldouble类型的就是8个字节,而32位操作系统的指针的大小(4字节)是固定的,因此可以传输较快些

        c、直接访问硬件内存

            原因:应为硬件内存的编号就是指针,所以指针可以直接访问

        d、申请堆内存

            原因:1、堆内存只有编号,虽说编号就是名字,但编号过于冗长,有些繁琐,

                  2、堆内存返回的就是一个指针,这是就需要一个指针来接受一个堆内存空间的地址

        e、方便处理一些相对复杂的类型

            比如,字符串、结构体等

      3、空指针与野指针

        a、空指针: 就是指针指向的NULL这个内存空间,NULL空间是一个特殊的空间,指针变量不能访问此空间,访问就会出错,出错的类型与操作系统有关

        b、野指针:就是指针指向的空间是未知的,不收程序员控制,

          1)空指针与野指针的比较 : 空指针就是定义一个指针时直接初始化赋值NULL,野指针就是定义是没有初始化

            a)空指针虽说定义了一定会错误,但可以收到控制

            b)野指针由于指向空间的未知的,不收程序员控制,因此是很危险的 ,因此在定义一个指针是最好初始化

            c)野指针可能造成一下3种情况:1、脏数据:就是将已经存在的数据给重新赋值覆盖掉

                           2、段错误:错误类型很多,需要根据情况而论

                           3、”一切正常“:这只是表面正常而已

    二、引用

       1、引用的概念是在c++普及的,而指针最经常出现在c中

       2、引用最通俗的解释就是取别名

       3、引用的符号为: 类型名&  别名   例如int& a = b;

       4、引用与取地址符的区别 :在于(&变量)是在定义是定义时出现还是在定义后出现

          a)引用只有在初始化定义的时候才是引用

          b)取地址就是一个变量已经定义过了,在用&变量就是取变量的地址

    三、总结

      讲道理引用与指针的区别不大,因为C++也是C的扩展版本,C++底层封装的就是C

      引用与指针的区别:

          1、引用是给一个变量取个别名,不会消耗内存孔家,指针需要先创建然后才能指向变量

          2、由第一点可以知道,引用访问、”传值“的速度更快,因此C++中一般都是用引用的

               a)、速度更快

               b)、为了与C有区别,两种语言如果没有区别,那么就不是两种语言了

          3、虽说引用的使用对变量的处理比指针更快,但有一点引用比不上指针,就是对堆空间的申请,

               原因:对空间的申请返回的是指针变量

  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/goul/p/9470530.html
Copyright © 2011-2022 走看看