C 動態建立物件陣列,c 中怎樣定義動態陣列

時間 2023-04-21 10:40:08

1樓:

難道你的c++教材上沒有講這些內容嗎?如果真的沒有,你應該把它丟掉了。看看吧,對於上述所有問題,基本上都有詳細的解釋。

在c++中不應該再使用c的malloc,而應該使用new表示式,operator new函式,定位new以及標準庫的記憶體分配物件。

最後乙個問題是想說在進入主函式前就需要分配陣列記憶體嗎?我沒記錯的話這個問題上沒有提到過,一種簡單的方法就是定義乙個全域性物件,在全域性物件的建構函式中申請記憶體,這是利用了全域性物件在進入main函式之前初始化的事實,不過這是依賴於編譯器實現的一種方法,是一種很容易造成隱蔽錯誤的方法,這在很多講c++注意事項的書籍上也有提到過不應該這樣做,事實上也很難找到必須這麼做的確切理由。

2樓:

用vector《型別》,list《型別》之類的資料結構。它們是可以動態改變大小的。推薦使用u++裡自帶的類庫。

可到。org/

3樓:匿名使用者

void×型別的 vector,你看可以嗎?

c++中怎樣定義動態陣列

4樓:水閏愛樹木

1、new 動態定義陣列。

2、因為new 就是用來動態開闢空間的,所以當然可以用來開闢乙個陣列空間。這樣,下面的語句:

int size=50;

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

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

int size=50,column=50;

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

1)首先 new int[size][column] 就是動態生成時確定的,所以它沒有錯,那麼就是 int(*p)[column],這句有問題了,這句為什麼不對呢, 那是因為,這是乙個定義語句,而定義語句先經過編譯器進行編譯,當編譯器執行到此處時,發現column 不是常數,因此不能通過編譯。

2)而之所以編譯器認為column 不是常數,是因為編譯階段,編譯器起的作用是查語法錯誤,和預分配空間,它並不執行程式,因此,沒有執行那個賦值語句(只是對這個語句檢查錯誤,和分配空間),因此編譯階段,它將認為column 是個變數。所以上面的二維陣列定義是錯誤的, 它不能通過編譯。

改成這樣:int size=50

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

便正確了。

5樓:藍色**

intmain()

注意int*p=newint[len];

這一句,你不能這樣做:intp[len];

c++編譯器會報錯說len的大小不能確定,因為用這種形式宣告陣列,陣列的大小需要在編譯時確定。而且這樣也不行:intp=newint[len];編譯器會說不能把int*型轉化為int型,因為用new開闢了一段記憶體空間後會返回這段記憶體的首位址,所以要把這個位址賦給乙個指標,所以要用int*p=newint[len]

6樓:匿名使用者

最簡單的辦法是使用stl庫中的vector。

如果用vc,也可以用carray。

自己定義的話可以參考vector或carray的**。

思路是:首先是動態申請一塊記憶體,然後根據需要插入刪除資料項或重新申請更大的記憶體並拷貝資料。

7樓:匿名使用者

也可以用new和delete動態分配記憶體。

c++中怎樣定義動態陣列?

c語言如何定義動態陣列

8樓:匿名使用者

360問答。

c語言中怎樣定義動態一維陣列。

ruisiteng lv12

用calloc或者malloc做。 因為 int n; int a[n]; 這個操作是不合法的,, 所以要用到分配記憶體的函式,, 請各位大蝦來幫幫手。

滿意答案。qt5841lv12

在c語言中,陣列的定義都是固定長度的,長度不允許變化。

可以通過鍊錶的方式來達到定義」動態陣列「的等價功能,舉例如下:

鍊錶節點定義如下:

struct node

存放資料時可以對節點中的node賦值即可,如:

struct node *p; /定義乙個鍊錶節點p->data = 3; /存放第乙個資料p = p->next;

p->data = 5; /存放第二個資料這樣,需要存放多少個資料就可以動態定義了,相當於實現了動態陣列的功能。

9樓:匿名使用者

標頭檔案中有4個函式,可以用來動態分配記憶體。靈活運用它們,就能實現陣列的動態分配和陣列儲存空間的自動擴充。

這4個函式是:

calloc、realloc、mylloc和free。

10樓:

c語言沒有動態陣列的概念,所謂動態陣列,就是在使用過程中,大小可以任意改變的陣列,但是c語言中的陣列,只要一旦宣告就無法再更改大小,所以一般都會把陣列大小設定的比較大一點,但是這樣會造成資源浪費,變數又不能作為陣列的下標,為了應對這種問題,需要指標的幫忙。指標可以用變數作為引數,申請一段固定大小的記憶體空間, 格式為: int *p; p=(int *)malloc(變數*sizeof(int));

11樓:匿名使用者

加上標頭檔案後用下面的。

cin>>num;

int *pp = new int[num];

for(int i=0; i < num; i++)for(int i=0; i < num; i++)delete pp;

12樓:倒霉熊

#include

#include

int main()

輸出資料*/

for(i=0;i/*刪除動態建立的陣列*/

free(p);

return 0;}

13樓:元雲夢

/*輸入陣列元素個數,儲存到變數num中*/scanf("%d", num);

動態分配陣列儲存空間*/

p = int *)malloc(num * sizeof(int));

輸入資料*/

printf("請輸入%d個整數:",num);

for(i = 0; i < num; i++)輸出資料*/

printf("輸入的陣列是:")

for(i = 0; i < num; i++)printf("%3d", p + i));

刪除動態建立的陣列*/

free(p);

c++為什麼要動態建立物件

14樓:匿名使用者

一、可以最大程度節省資源:

比如乙個程式,它可以處理很多東西,1, 可以處理乙個五萬人的學校的所有學生的資料。

2, 可以處理乙個幾十人的小班級。

1)如果用靜態的分配,比如說,陣列。當知道要處理這些問題的時候,要定義乙個50000 長度的陣列才能解決問題。這時候,當用這個程式去處理班級資料。

這裡分配的大量的記憶體位址都會造成了浪費。

2)要處理50000人以上的學校的資料,又會出現分配不足的問題。需要重新修改**。(這就是很麻煩的事情了)這個在c++上叫溢位。

3)使用動態分配記憶體的好處。動態的話,就是使用多少,就用多少。根據輸入的資料大小來分配記憶體。

比如說,這個程式處理50人的小班級,則會分配50個空間。當增加乙個人的時候,則程式就能自動在後面再加乙個空間。

二、優點如下:

1,不會造成浪費,基本上都是有多少用多少。

2,能夠隨時增加,減少。

程式的靈活性更高。也不會出現分配不足的問題。

15樓:匿名使用者

比如乙個程式在執行時需要根據使用者需求建立若干個類a的物件,你**怎麼寫? a a,b,c...靜態建立物件是行不通的。

這時候就要動態建立了。

動態開闢記憶體靈活,特殊的資料結構用動態物件才好。

16樓:掌中萌鼠

好處當然有很多!!ls說的是乙個 還有最重要的 可以按需求分配記憶體。

提高系統資源的利用率。

需要多少就分配多少。

一口氣分配了 會出現很多無用的記憶體占用。

C 動態建立多維陣列,C 中如何動態建立陣列?

include using namespace std int main return 0 c 中如何動態建立陣列?定義陣列時,陣列的大小必須為常量,即在編譯時就要存在的數值,如 int arr 5 當陣列大小要根據程式的執 況確定時,可採用建立動態陣列的形式,如 int x 10 char tes...

C 如何建立動態二維陣列

int p int i 申請空間 p int malloc sizeof int m for i 0 i p i int malloc sizeof int n 釋放空間 for i 0 i free p i free p 同時還有種方法推薦你。我臨時想到的,沒試過有興趣你可以去試試。可以建個帶1個...

C語言如何定義動態陣列,C語言如何動態分配二維陣列??

360問答 c語言中怎樣定義動態一維陣列 ruisiteng lv12 2013 09 08 用calloc或者malloc做。因為 int n int a n 這個操作是不合法的,所以要用到分配記憶體的函式,請各位大蝦來幫幫手。滿意答案 qt5841 lv12 2013 09 09 在c語言中,陣...

C 類型別指標陣列,C , 動態指標陣列作為類的成員,如何分配空間

c 不支援動態陣列,陣列在編譯時就已經被分配了記憶體,因此不能夠使用變數作為陣列定義時的大小。把private改為public,先定義乙個物件,再賦值 a obja header msg 0 ai header msg 1 vi header msg 2 oi pp p m 是錯的,陣列的長度必須為...

C 中動態陣列array的用法

strarr array of string 動態陣列定義時不與維數 begin setlength strarr,6 分配6個元素位置 0 5 strarr 0 萬一 動態陣列的下界是 0 showmessage strarr 0 分配空間後和靜態陣列一樣使用 strarr nil 一般沒必要手動...