• C++ new的用法


    C++ new的用法

    一、总结

    一句话总结:

    new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。

    1、c++ new关键字和一般声明变量的区别是什么?

    new开辟的空间在堆上,而一般声明的变量存放在栈上。

    2、c++ new出来的东西应该赋值给什么类型的变量?

    new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。

    3、c++ new关键字实例?

    int *p = new int(3);

    二、C++ new的用法

    转自或参考:C++new的用法_清启牧的博客-CSDN博客_c++new
    https://blog.csdn.net/weixin_41232202/article/details/96452228

    new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上

    通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。

    另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。具体的代码如下:

     1 #include <iostream>
     2 using namespace std;
     3  
     4 int example1()
     5 {
     6   //可以在new后面直接赋值
     7   int *p = new int(3);
     8   //也可以单独赋值
     9   //*p = 3;
    10  
    11   //如果不想使用指针,可以定义一个变量,在new之前用“*”表示new出来的内容
    12   int q = *new int;
    13   q = 1;
    14   cout << q << endl;
    15  
    16   return *p;
    17 }
    18  
    19 int* example2()
    20 {
    21   //当new一个数组时,同样用一个指针接住数组的首地址
    22   int *q = new int[3];
    23   for(int i=0; i<3; i++)
    24     q[i] = i;
    25  
    26   return q;
    27 }
    28  
    29 struct student
    30 {
    31   string name;
    32   int score;
    33 };
    34  
    35  
    36 student* example3()
    37 {
    38   //这里是用一个结构体指针接住结构体数组的首地址
    39   //对于结构体指针,个人认为目前这种赋值方法比较方便
    40   student *stlist = new student[3]{{"abc", 90}, {"bac", 78}, {"ccd", 93}};
    41  
    42   return stlist;
    43 }
    44  
    45  
    46  
    47 int main()
    48 {
    49   int e1 = example1();
    50   cout <<"e1: "<< e1 << endl;
    51  
    52   int *e2 = example2();
    53   for(int i=0; i<3; i++)
    54     cout << e2[i] << " ";
    55   cout << endl;
    56  
    57  
    58   student *st1 = example3();
    59  
    60   for(int i=0; i<3; i++)
    61     cout << st1[i].name << " " << st1[i].score << endl;
    62  
    63  
    64  
    65   return 0;
    66 }
     
  • 相关阅读:
    linux 网络性能优化
    select/poll/epoll原理探究及总结
    linux socket读数据错误解释
    linux 单机跨进程通信
    map与hash_map使用与对比
    python web自动化测试框架搭建(功能&接口)——环境搭建
    Jenkins构建触发器的区别
    python改变导入模块中的变量的问题
    Jmeter断言中判断请求失败的响应代码问题
    Jmeter中动态获取jsessionid来登录
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13044721.html
Copyright © 2020-2023  润新知