動態(tài)數(shù)組,顧名思義,就是可以動態(tài)分配長度的數(shù)組。在c語言中,數(shù)組的長度是固定的,而這種限制顯然是很不靈活的。在c++中,數(shù)組有時候不用在編譯時就知道長度,直到運行時才知道。與普通的數(shù)組變量不同,動態(tài)分配的數(shù)組將一直存在,直到程序顯式的釋放它為止。
定義: int *p=new int[20];
p就是一個動態(tài)數(shù)組,這時我們發(fā)現(xiàn),其實所謂的動態(tài)數(shù)組就是一個指針,使用new為p分配長度。我們可以通過這種方式初始化: int *p=new int[20]();
同樣上面的語句等同于:
int n=20;
int *p=new int[n];
因為n是一個變量,所以數(shù)組的長度是動態(tài)的。
操作實例: int n=20;
int *p=new int[n];
p可以使用數(shù)組下標為其賦值:
for(int i=0;i<n;i++)
{
p[i]=i+3;
}
上面這種方式?jīng)]有問題,但我想既然p是一個指針,那么使用指針操作一樣也可以吧?
for(int i=0;i<n;i++,p++)
{
*p=i;
}
這樣就可以了,將他們輸出:(這時指針p又指向了最后)
p--;
for(int *p2=p-10;p2!=p;p--)
{
cout<<*p<<endl;
}
動態(tài)空間釋放: 最后重要的是別忘了將動態(tài)創(chuàng)造的空間釋放掉,語句是:delete [] p; ‘[ ]’表明該指針是指向的自由存儲區(qū)的數(shù)組,而非單個對象。如果遺漏了空方括號,編譯器將無法發(fā)現(xiàn)這個錯誤,將導(dǎo)致程序在運行時出錯。
完成了!以下是完整代碼:
#include<iostream>
using namespace std;
int main(void)
{
int n=20;
int *p=new int[n];
for(int i=0;i<n;i++,p++)
{
cout<<p<<endl;
*p=i;
}
p--;
for(int *p2=p-n;p2!=p;p--)
{
cout<<*p<<endl;
}
delete [] p;
getchar();
}