• 【C++ Primer Plus学习记录】指针——使用new来分配内存


    下面看看如何使用指针来管理运行阶段的内存空间分配。

    指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。

    在C语言中,可以用库函数malloc()来分配内存,在C++中仍然可以这样做,但C++还有更好的方法——new运算符

    下面试试这种新技术,在运行阶段为一个int值分配未命名的内存,并使用指针来访问这个值。这里的关键所在是C++的new运算符。程序员要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址。程序员的责任是将该地址赋给一个指针。下面是一个这样的示例:

    int *pn = new int;

    new int 告诉程序,需要适合存储int的内存。new运算符根据类型来确定需要多少字节的内存。然后,找到这样的内存并返回其地址。接下来,将地址赋给pn,pn是被声明为指向int的指针。

    将这种方法与将变量的地址赋给指针进行比较:

    1. int higgens;
    2. int * pt = &higgens;

    上述两种情况都是将一个int变量的地址赋给了指针。在第二种情况下,可以通过名称higgens来访问该int,在第一种情况下,则只能通过该指针进行访问。

    pn指向的内存没有名称,如何称呼它呢?我们说pn指向一个数据对象,这里的“对象”不是“面向对象编程”中的对象,而是一样“东西”。术语“数据对象”比“变量”更通用,它指的是为数据项分配的内存块。 

    为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:

    typeName * pointer_name = new typeName;

    需要在两个地方指定数据类型,用来指定需要什么样的内存和用来声明合适的指针。

    1. //4.17如何将new用于两种不同的类型
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. int nights = 1001;
    7. int *pt = new int;//在程序运行时进行
    8. *pt = 1001;
    9. cout << "nights value = " << nights << ": location " << &nights << endl;
    10. cout << "int value = " << *pt << ": location = " << pt << endl;
    11. double *pd = new double;
    12. *pd = 10000001.0;
    13. cout << "double value = " << *pd << ": location = " << pd << endl;
    14. cout << "location of pointer pd: " << &pd << endl;//&pd为指针本身的地址
    15. cout << "size of pt = " << sizeof(pt) << ": size of *pt " << sizeof(*pt) << endl;
    16. cout << "size of pd = " << sizeof(pd) << ": size of *pd " << sizeof(*pd) << endl;
    17. system("pause");
    18. return 0;
    19. }

  • 相关阅读:
    奇瑞新能源无界Pro 高科技配置+强续航实力征战纯电市场
    【Unity】实现轮盘抽奖
    介绍Spring Security框架,以及如何使用它实现应用程序的安全性
    Webpack完整打包流程分析
    java-php-python-ssm校园旺角超市外卖平台计算机毕业设计
    【冰糖Python】python并行化-multiprocessing,joblib,numba
    es6新增方法
    LLM应用实战:当KBQA集成LLM
    端口转发及穿透内网
    【分布式】NCCL部署与测试 - 01
  • 原文地址:https://blog.csdn.net/qq_39072304/article/details/133757761