靜態初始化的陣列的長度必須是在程式中確定的常數,不能是由使用者輸入的變數
例子:int a[10];//正確
student stud[10];//正確:student是乙個學生類
int n;cin>&tkgcbt**hgt;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;
>>n;
student *stud=new student[n]; //這樣學生陣列的長度不需要在程式中確定, 可以在程式執行的時候由使用者輸入
注意:靜態初始化物件在定義的時候分tkgcbt**h配空間, 呼叫無引數的建構函式或者是有引數的建構函式
問題來了:如果我就是要用靜態初始化陣列,但是我的輸入長度又想取決於cin>>n;那怎麼辦??
如果我們沒有使用動態初始化陣列,程式設計客棧使用靜態初始化陣列,陣列的長度需要到程式執行的時候確定,可以在程式裡初始化乙個比較大的陣列,執行程式時只使用長度為n的部分陣列,儘管這樣會浪費記憶體資源,但是也是一種解決方案!!
例子:int a[200
int n;
cin>>n; //只是使用了陣列的前n個偏移量
for(int k=0; k>a[k];
student stud[200];
int n;
cin>>n;//只是使用了陣列的前n個偏移量
for(int k=0;k>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];//正確
本文標題: c++中靜態初始化陣列與動態初始化陣列詳解
本文位址:
陣列 初始化 只含動態初始化 靜態初始化
首先j a中此處只講靜態初始化 動態初始化 靜態初始化就是提前在陣列中設定好了陣列內容,此內容不做改動,該多長已經在設定內容的時候已經決定 動態初始化就是僅限於new及確定陣列大小長度,裡面的陣列內容沒有,可自由進行填寫,也包含了靜態初始化的內容 示例 package 陣列 public class...
java的靜態初始化和動態初始化
package array public class array for int i 0 i 3 i system.out.println for int i 2 i 0 i system.out.println system.out.print b.length n 動態初始化 inta new ...
靜態初始化和例項初始化
父類單獨的效果 當父類單獨執行時,靜態初始化塊優先執行,然後是例項初始化塊,最後才是構造器 子類單獨效果 首先執行父類的靜態初始化塊和子類的初始化塊 優先執行靜態 然後執行父類的例項初始化塊和構造器,最後執行子類的例項初始化塊和構造器 父類子類效果1 父在前子在後 先將父類的物件例項出來後,進行子類...