關於C 動態定義陣列

2022-09-02 12:39:08 字數 807 閱讀 9266

首先:為什麼需要動態定義陣列呢?

這是因為,很多情況下,在預編譯過程階段,陣列的長度是不能預先知道的,必須在程式執行時動態的給出

但是問題是,c++要求定義陣列時,必須明確給定陣列的大小,要不然編譯通不過 

如: int array[5];正確

int i=5;

int array[i]; 錯誤 因為在編譯階段,編譯器並不知道 i 的值是多少

那麼,我們該如何解決定義長度未知的陣列呢?

答案是:new 動態定義陣列 

因為new 就是用來動態開闢空間的,所以當然可以用來開闢乙個陣列空間

這樣,下面的語句:

int size=50;

int *p=new int[size]; 是正確的

但是二維動態陣列能不能也這樣定義呢

int size=50,column=50;

int (*p)[column]=new int [size][column]

這樣的語句,編譯器通不過,為什麼呢?

首先 new int[size][column] 就是動態生成時確定的,所以它沒有錯

那麼就是 int(*p)[column],這句有問題了,這句為什麼不對呢, 那是因為,這是乙個定義語句,而定義語句先經過編譯器進行編譯,當編譯器執行到此處時,發現column 不是常數,因此不能通過編譯。 而之所以編譯器認為column 不是常數,是因為編譯階段,編譯器起的作用是查語法錯誤,和預分配空間,它並不執行程式,因此,沒有執行那個賦值語句(只是對這個語句檢查錯誤,和分配空間),因此編譯階段,它將認為column 是個變數。所以上面的二維陣列定義是錯誤的, 它不能通過編譯。

C定義動態陣列

一 動態陣列,即根據實時變化,可以擴大陣列大小。而這個功能的實現需要用到指標和malloc和realloc函式。int a int malloc 10 sizeof int 那麼 a就相當於乙個有10個元素的陣列。當資料量超過10個放不下的時候,利用 a int realloc a,20 sizeo...

C語言定義動態陣列

今天在unbutu寫一道簡單的約瑟夫環的問題 有n個人,迴圈報數,報到3的人淘汰,求最後剩下的人,我就想定義乙個動態陣列來記錄他們是否被淘汰 如果淘汰了就把他對應陣列中的值改為0,淘汰n 1個人之後,陣列中值為1的人就是最後剩下的人。int n printf 請輸入總人數 n scanf d n i...

定義動態陣列

開闢一維陣列m 8 int t new int m 開闢一維動態陣列,相當於t m int t new int 8 開闢乙個空間為8的整型陣列空間 int t new int 8 開闢了乙個整型且賦值為8的空間 int t new int 開闢單變數位址空間,即將int型別的空間位址賦給指標t 銷毀...