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...