指针与内存的分配

1.指针可以这样理解:

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

intptr; ----->强调的是,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是安全的。

原文链接: https://www.cnblogs.com/sjxbg/p/5671340.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237055

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:15
下一篇 2023年2月13日 下午5:16

相关推荐