zoukankan      html  css  js  c++  java
  • 指针与内存的分配

    1.指针可以这样理解:

      int  *ptr; -----> 强调*ptr是一个int类型的指针。

      int*  ptr; ----->强调的是,int*是一种类型-----指向int的指针。

      注意:   int* p1,p2;    //该声明创建一个指针p1和一个int变量p2。

    2.指针的危险

    • 计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤,很重要。
    long* fellow;
    *fellow = 123;
    /*fellow是一个指针,无指向,该代码没有将地址赋给fellow,导致fellow没有被初始
    化,其实就是一个野指针。*/

    注意:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

    3.指针与内存

    • 指针可不是整型,虽然计算机通常把地址当作整数来处理,整数描述的是可加减乘除的数字,而指针描述的是位置。
    • c++使用new来分配内存(c语言中用的是三个loc)
    • 程序员要告诉new,需要为哪种数据类型分配内存,new将找到一个长度正确的内存块,并返回该内存块的地址。程序员的责任就是将该地址赋给一个指针。
    (1) int * pn = new int;
    (2) int higgens;
       int * pt = &higgens;
    (1)和(2)都是将一个int变量的地址赋给了指针。在(2)中可以通过名称higgens来
    访问该int,在(1)中只能通过该指针进行访问。pn指向的内存没有名称,pn指向一个数据对象,
    此对象不是oop中的对象,而是一样东西,数据对象比变量更通用,指的是数据项分配的内存块。
    • 使用delete释放内存(如果不将new分配的内存释放,发生内存泄漏)--------> delete pn; new并不意味着要使用用于new的指针,而是用于new的地址。
    • 一般来说,不要创建两个指向同一个内存块的指针,因为这将增加错误的删除同一个内存块两次的可能性。

    4.适用new创建动态数组

    • int * psome = new int [10];
      new运算符返回第一个元素的地址。对于new创建的数组,释放则:
      delete [] psome;    //方括号告诉程序,释放整个数组,而不仅仅是指针指向的数组。
    • int * psome = new int [10];
      可以将它看做是一根指向该元素的手指。假设int占4个字节,则将手指沿正确的方向移动
      4个字节,手指将指向第2个元素。共10个元素,这就是手指移动的范围,因此,new语句
      提供了识别内存块中每个元素所需的全部信息。
    • 使用new与delete注意事项
      • 不要使用detlete来释放不是new分配的内存。
      • 不要使用delete释放同一个内存块。
      • 如果使用new[]为数组分配内存,则应使用delete[]来释放。
      • 如果使用new[]为一个实体分配内存 ,则应使用delete(无方括号)来释放。
      • 对空指针应用delete是安全的。
  • 相关阅读:
    转: 关于linux用户时间与系统时间的说明
    转: 关于CAS cpu锁的技术说明。
    基于TCPCopy的Dubbo服务引流工具-DubboCopy
    Netty中的坑(下篇)
    编写明显没有错误的代码
    Zookeeper-Zookeeper client
    Zookeeper-Zookeeper leader选举
    Zookeeper-Zookeeper启动过程
    Zookeeper-Zookeeper的配置
    Zookeeper-Zookeeper可以干什么
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5671340.html
Copyright © 2011-2022 走看看