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