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 }