new
运算符使用
一个是新开辟内存空间。一个是销毁内存空间。
开辟内存空间返回值是地址,销毁内存空间直接用delete
关键字就可以。
问题:可以将一个变量的内存大小放入new吗?可以将数组大小的内存放入new吗?
//问题①
int a = 10;
int *ptr = new(a);
//问题②
int array[10];
int array_ptr = new(array);
经过实验,语法错误,但是可以。
需要改int *ptr = new(a);
成int *ptr = new int(a);
但数组我这样试不可以。
int* UseNew() {
int array[10] ;
int* a = new int(array[9]);
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
a[i] = i + 1;
}
return a;
}
并不能打印出值。
想想&提示,地址类型,是8位,而数组单个元素是整型4位。所以8/4=2,整个数组就只有2个元素。所以它才会打印出2个。
现在使用黑马的做法,返回数组。
#include<iostream>
#include<string>
using namespace std;
int* UseNew() {
int* a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = i + 1;
}
return a;
}
int main(){
int* new_ptr = UseNew();
cout << "使用新开辟的内存空间的值为:" << *new_ptr << endl;
for (int i = 0; i < 10; i++) {
cout << new_ptr[i] << endl;
}
system("pause");
return 0;
}
销毁内存空间,在指针前写delete
关键字即可。
#include<iostream>
#include<string>
#include"print.h"
using namespace std;
int* UseNew() {
int* a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = i + 1;
}
return a;
}
int main() {
int* new_ptr = UseNew();
cout << "使用新开辟的内存空间的值为:" << *new_ptr << endl;
delete new_ptr;
for (int i = 0; i < 10; i++) {
cout << new_ptr[i] << endl;
}
system("pause");
return 0;
}
运行后有如下报错:
说明销毁指针之后,就不能再访问其地址数据。