- 在堆区创建数据new 返回的是 该数据类型的指针
开辟数组需要创建一个指针
int *p=new int; //如果是数组,则改成 int *p[]=new int[10]; //这个开辟出来的是数组中有十个元素。
开辟之后,在代码执行之后,需要进行释放,因而需要
delete p; //如果是数组,那么需要改成 delete[]p;
第一种是先创建一个空指针,在对空指针进行初始化。为数组开辟新空间的时候,将数组的声明放在 new 的后面。
#includeusing namespace std; int main( ) { double * p = NULL; p = new double[ 10 ]; for ( int i = 0; i < 10; i++) { p[ i ] = i + 100; } for ( int i = 0; i < 10; i++) { cout << p[ i ] << endl; } delete[ ] p; return 0; }
第二种是创建指针的时候顺便就对其进行初始化。
#include附:对于“为数组开辟空间”分析using namespace std; int main( ) { int * arr = new int [10]; for (int i = 0; i < 10; i++) { arr[ i ] = 100 + i; } for (int i = 0; i < 10; i++) { cout << arr[ i ] << endl; } delete [ ] arr; return 0; }
(对于这个案例,我借用了一次 类 的使用,如果小白们不理解什么是 类 ,可以暂且理解为 和结构体一个用法。)
#includeusing namespace std; class CArray { private: int *vec; int num; public: CArray(int n) { num = n; vec=new int[n]; }// 构造函数,n为数组大小 ~CArray() { cout << "折构函数:该程序已经执行完毕." << endl; }// 析构函数 int length() { delete []vec; return num; }// 取数组元素个数 int get(int i) { for (int k = 0; k < num; k++) { if (k == i - 1) { return vec[i-1]; } } }// 取数组第i个元素 void set(int i, int value) { for (int k = 0; k < num; k++) { if (k == i - 1) { vec[i - 1] = value; } } }// 设置数组第i个元素 int getMax() { int temp=0; for (int i = 0; i < num; i++) { if (temp < vec[i]) { temp = vec[i]; } } return temp; }// 取数组最大元素 int getMin() { int temp = vec[0]; for (int i = 0; i < num; i++) { if (temp > vec[i]) { temp = vec[i]; } } return temp; }// 取数组最小元素 void print() { for (int i = 0; i < num; i++) { cout << vec[i] <<" "; } cout << endl; }// 打印数组元素 }; int main() { CArray asc(5); for (int i = 0; i < asc.length(); i++) { int nuu; cin >> nuu; asc.set(i,nuu); cout << endl; } cout<<"最大的数为"< > n; cout << "其值为:"< 代码有点长,如果不想看的话可以直接看下面的,我截取了部分进行讲解。
CArray(int n) { num = n; vec = new int[n]; }// 构造函数,n为数组大小这个是在构造函数中为数组开辟空间,使用了 new ,由于类的特殊性,并且我将 vec 设置为 private ,因而可以直接在类内进行定义,而不必重新声明(意思是,不要写以下代码:)
CArray(int n) { num = n; int *vec = new int[n]; }此时,由于已经定义过 vec ,因此不用再次添加 int 重新定义。同时也不用解引用 * 因为输出开辟空间后的结果,就是以指针形式。



