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