c語言中陣列動態增長有哪些方法,c語言 一維陣列如何增加長度

2022-01-31 05:55:28 字數 3528 閱讀 7015

1樓:匿名使用者

可以,但不能是靜態陣列如int a[50];左邊分配在堆疊上,(分配在堆疊上的變數)不能在編譯時不知道分多少空間,並且分了多少空間就是多少。

如果想讓陣列大小動態分配,可以使用下面做法,記得用完要free:

int* a=(int*)malloc(n*sizeof(int));//n是陣列的大小。

或者這樣calloc函式的一個好處就是分配完記憶體區域後會自動把該區域清零,所以特別適合陣列:

int* a=(int*)calloc(n,sizeof(int));//n是陣列的大小。

延長陣列大小的話這樣做:

a=(int *)realloc(a,m*sizeof(int));//m新陣列的大小。並且,原來malloc或者calloc的記憶體區域會自動被free掉,不用你操心。

2樓:匿名使用者

一。在原陣列單元后面是沒法再擴長的,因為後面的單元沒法保證一定有。所以,陣列原址動態增長肯定是不行的;

二。要麼定義長一點的陣列,要麼自已把n個陣列用連結串列串起來,但很繁瑣;

三。重新分配更長的陣列,把原陣列資料複製過來,再釋放掉原陣列,這是一般動態陣列模組的普遍做法。但效率很低。

例如下面方法都是重新分配更長的陣列空間:

int* a=(int*)malloc(n*sizeof(int));//n是陣列的大小。

int* a=(int*)calloc(n,sizeof(int));//n是陣列的大小。

int* a=(int *)realloc(a,m*sizeof(int));//m新陣列的大小。

3樓:匿名使用者

權威答案:

一。從技術上來講,在原陣列單元后面是沒法再擴長的,因為後面的單元沒法保證一定有。所以,陣列原址動態增長肯定是不行的!!

二、要麼定義長一點的陣列,要麼自已把n個陣列用連結串列串起來,但很繁瑣;

三、有的語言版本,會提供「擴充套件陣列」的子程式,其實就是再申請更長的陣列,把原陣列資料複製過來,

再釋放掉原陣列,這是一般動態陣列模組的普遍做法。

可能看出, 這效率很低。

樓主應該可以知道了,不要再糾結了。

4樓:似夕水每

用連結串列吧 用 malloc 開闢新空間 每次增加一個陣列元素 就開闢一個新空間

或者由使用者輸入陣列大小n 然後開闢一個空間 *a = (int *)malloc(sizeof(int)*n);

就可以使用a 陣列 比如初始化

for(i = 0; i < n; i++)scanf("%d", a[i]);

c語言 一維陣列如何增加長度

5樓:風若遠去何人留

c語言一維陣列分靜態一維陣列和動態一維陣列兩種。

一、靜態一維陣列,在定義的時候就已經確定其長度。如

int a[10];

就是定義了一個長度為10個元素的整型陣列。

靜態陣列不支援長度的增加。如果要增加長度,只能新定義一個更長的陣列,並把原始陣列的資料複製到新陣列中。

二、動態一維陣列,本質上是一個一維指標,並在其上分配一段記憶體,在這段記憶體上,可以當做陣列來使用。

這種情況下,可以通過realloc函式,來實現增加長度。

int *p; //定義指標

p = malloc(10*sizeof(int));//分配10個元素。

p = realloc(p,20*sizeof(int));//重新分配,長度增加到20. 使用該函式,可以保持原本空間內的資料不變,只是可用空間增加。

6樓:

無法增加長度,你可以定義一個新陣列,然後把舊的陣列資料複製到新陣列

7樓:

c語言一維陣列不能直接增加長度,但可以採用動態空間分配間接地實現此功能。

8樓:匿名使用者

不能增加長度,如果需要能增加長度的陣列,建議使用vector

9樓:四群小

用int *cam_gm = new int [i];來定義動態陣列

c語言中,動態陣列的問題

10樓:匿名使用者

你複製貼上你的**,方便我修改,你的做法是錯誤的! 一、讀資料時,完全可以用fgets()函式替代 二、或者,在讀資料時,應該每次將j值置0 三、a指標用的不正確!也沒有意義 四、strcmp()那裡對陣列成員的引用也不對!

c語言中怎麼定義動態的陣列長度

11樓:

這個簡單..

你通過malloc分配空間的方式來定義陣列哇..

看看這個例程..

int main(void)

}類似這樣

12樓:匿名使用者

這個需求是符合c99標準,只要用支援c99標準的編譯器就能通過編譯。

比如下面的**,用gcc就能編譯、執行。

#include

int main()

如果編譯器不支援c99標準,

可以用malloc(size_t )這個函式動態分配記憶體。

13樓:匿名使用者

c語言不支援動態定義陣列,但你可以用指標來實現相同的功能,具體參考:

14樓:

你scanf對其進行賦值,那x,y就是常量了

然後再定義a[x][y]有何不可呢?

15樓:

int b = 5; //陣列長度為5

int* a=new int[b];

for (int i = 0; i < b; i++) //為陣列賦值

c語言中定義一個動態一維陣列的函式,然後在主函式中使用

16樓:有錢買不起房子

如果要獲取記憶體地址,你上面那種函式獲取方法是錯誤的.函式中int *a僅僅是主函式變數ff的一個副本,ff當初沒有具體指明地址,傳遞給a也是不確定地址,a分配完畢,只是修改a自身指向,並不修改ff指向.所以用下面方法進行修改,採用返回地址方法

#include //包含標頭檔案

#include

int *array1(int x)//使用返回指標能正確分配記憶體地址

void main()

17樓:

像你這種需要通過傳參並對實參分配空間,需要傳指標的地址。

#include "stdio.h"

#include "stdlib.h"

void array1(int x, int **a)/*形參也是指向指標的指標*/

int main()

18樓:匿名使用者

void array1(int x,int *a)

int main()

c語言中陣列元素互換的問題,C語言中陣列元素互換的問題

當index為0時,bai陣列中下標為du0的和下標為4 0的元素交換,也zhi就是第一個和最後一dao個交換,回1,5 交換 當index為1時,答陣列中下標為1的和下標為4 1的元素交換,也就是第二個和倒數第二個交換,2,4 交換 因為此陣列元素的個數為奇數個,所以,最中間那個沒有必要交換,所以...

c語言中定義有元素的整型陣列,C語言中,定義一個有100個元素的整型陣列inta100,然後用迴圈產生100個隨機數求大神幫助

include include int main 注意,編譯文 du件字尾必zhi須是.c檔案。希望採dao納 c語言如何srand和rand函式產生10個1 100內的隨機數 需要準備的材料分別有 電腦 c語言 編譯器。1 首先,開啟c語言編譯器,新建一個初回始.cpp檔案,例如答 test.cp...

c語言中陣列名作為函式引數,C語言中,陣列名作為函式引數,屬於什麼傳遞,為什麼?

因為你從主函式傳過來之後,是給了a 10 啊,與arrlen無關啊,而且在呼叫函式時是會給區域性變數重新分配記憶體,但這也只是說原先那個記憶體消失了,那麼記憶體裡面的值也會消失了,就會重新執行rrlen sizeof a 4 函式定義和宣告的引數應該是 intoid check struct snm...