1. 程式人生 > >C++中靜態初始化陣列與動態初始化陣列

C++中靜態初始化陣列與動態初始化陣列

靜態初始化的陣列的長度必須是在程式中確定的常數,不能是由使用者輸入的變數

例子:

int a[10];//正確

Student stud[10];//正確:Student是一個學生類

int n;cin>>n;int a[n];//錯誤

int n;cin>>n;Student stud[n];//錯誤:Student是一個學生類

動態初始化陣列可以使用使用者輸入的變數作為陣列的長度。

例子:

int n;

cin>>n;

int *a=new int[n];//這樣整數陣列的長度不需要在程式中確定,可以在程式執行的時候由使用者輸入

int n; 

cin>>n; 

cin>>n; 

Student  *stud=new  Student[n]; //這樣學生陣列的長度不需要在程式中確定, 可以在程式執行的時候由使用者輸入

注意:靜態初始化物件在定義的時候分配空間, 呼叫無引數的建構函式或者是有引數的建構函式

問題來了:如果我就是要用靜態初始化陣列,但是我的輸入長度又想取決於cin>>n;那怎麼辦??

如果我們沒有使用動態初始化陣列,使用靜態初始化陣列,陣列的長度需要到程式執行的時候確定,可以在程式裡初始化一個比較大的陣列,執行程式時只使用長度為n的部分陣列,儘管這樣會浪費記憶體資源,但是也是一種解決方案!!

例子:

int a[200];

int n;

cin>>n; //只是使用了陣列的前n個偏移量

for(int k=0; k<n; k++)

cin>>a[k];

Student stud[200];

int n;

cin>>n;//只是使用了陣列的前n個偏移量

for(int k=0;k<n;k++)

cin>>stud[k];

注意:動態初始化在定義指標時沒有分配空間, new語句的時候才呼叫建構函式分配空間而且初始化

關於C/C++靜態初始化陣列的問題的異同需要強調一點:(這不是分析出來的,是在vs2015執行時發現的)

在C語言中:int n=1;int a[n];//錯誤

在C語言中:int const n=1;int a[n];//錯誤

在C++語言中:int n=1;int a[n];//錯誤

在C++語言中:int const n=1;int a[n];//正確