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

時間 2022-03-22 14:58:22

1樓:匿名使用者

360問答

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

ruisiteng lv12

2013-09-08

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

滿意答案

qt5841

lv12

2013-09-09

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

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

鍊錶節點定義如下:

struct node

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

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

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

2樓:匿名使用者

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

這4個函式是:

calloc、realloc、mylloc和free。

3樓:匿名使用者

c語言定義動態陣列需要用到動態記憶體分配函式,參考**如下:

#include

#include

int main()

4樓:

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

這時 p指標的作用就相當於 陣列名(其實陣列名也就是乙個指標).希望可以幫到你

5樓:匿名使用者

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

cin>>num;

int *pp = new int[num];

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

6樓:倒霉熊

#include

#include

int main()

/*輸出資料*/

for(i=0;i

/*刪除動態建立的陣列*/

free(p);

return 0;}

7樓:元雲夢

/*輸入陣列元素個數,儲存到變數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語言如何動態分配二維陣列??

8樓:

一、二維資料的記憶體空間動態分配

方法一:

首先arr是乙個二級指標,為arr分配xdim空間,每一維都是乙個指向陣列的指標,且每個陣列內部的位址空間是連續的,但是陣列之間的位址空間沒有連續性。

這種分配方法在記憶體中的布局如下:

方法二:

這種方法相當於動態分配了乙個一維的連續的空間,然後讓相應的陣列指標指向某些固定的位置達到呼叫的目的。

這種分配方法在記憶體中的布局如下:

二、二維資料的記憶體空間釋放

對於第一種分配方式需要乙個乙個釋放,對第二種方式只要分配兩個指標即可。

三、完整**

9樓:匿名使用者

使用malloc函式,先分配第一維的大小,然後再迴圈分配每一維的大小。

示例**,分配3行4列二維陣列:

#include

#include

int main()

//初始化

for (i = 0; i < 3; ++i)}//輸出測試

for (i = 0; i < 3; ++i)printf ("\n");

}//釋放動態開闢的空間

for (i = 0; i < 3; ++i)free(a);

return 0;}/*

輸出:0 1 2 3

1 2 3 4

2 3 4 5*/

10樓:

假設你要定義3行4列的陣列

int **a;

n=3,m=4;

a=(int**)malloc(n*sizeof(int*));

for(j=0;j

a[j]=(int*)malloc(m*sizeof(int*));

釋放的時候也要先釋放列後釋放行

for(j=0;j

free(a[j]);

free(a);

a=null;最後給他賦個零。

ok分給我吧

11樓:匿名使用者

如果p是這樣char **p;定義的。

那好像*p=(char **)malloc(1000*sizeof(char *));要改成p=(char **)malloc(1000*sizeof(char *));

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

12樓:匿名使用者

動態陣列長bai度,對於部du分新的編譯器,支zhi持c99的,可以直接用變數dao定義陣列

比如func(int n)

不過版 有些編譯器不支援 會報錯

權就只能使用動態陣列,也就是malloc

如func(int n)

c語言中動態陣列的定義怎麼做啊!

13樓:滕攸謬爾容

c還是c++,如果是c,你只能用malloc函式分配,比如intnlen;

double

*parray;//動態書組

scanf("%d",&nlen);

parray=malloc(nlen*

sizeof(double));

....

free(parray);

如果是c++,可以用mfc的carray,或者stl的vector如果要增長,可用realloc

c語言中如何定義陣列

14樓:文望刃

c語言中,同變數一樣;陣列也必須先定義後使用。

一維陣列的定義形式:

型別識別符號  陣列名[常量表示式];例如int a[10];   其中a為位址常量。

如變數的定義一樣,int a ;double a;float a等;陣列的定義只是把後面的變數名改為陣列名而已。

int a[10]就是定義了乙個陣列名為a的陣列;此陣列有10個元素。其中各元素從a[0]到a[9];並沒有a[10]元素。下面列舉乙個。

常量表示式可以包括字面常量和符號常量;但不能包含變數。例如對下面定義是錯誤的

int n=5

int a[n]

可以修改為

#define n 5

int a[n]

其中對二維及多位陣列定義可以類推

int  a[x][y][z][...]其中 x,y,z為數字。

15樓:匿名使用者

陣列定義的三種方式

1、第一種

int a = newint[5];

a[0] = 10;

2、第二種

int c = newint;

3、第三種

int i =;

4、錯誤的寫法

int i1 = [1,2,3,4];

system.out.println(arrays.tostring(c));

5、總之,具體的元素不能被【】包裹。【】包裹的應該是陣列的數量。

擴充套件資料陣列的注意事項:

1、 陣列中每個元素的資料型別必須相同,對於inta[4];,每個元素都必須為 int。

2、 陣列長度 length 最好是整數或者常量表示式,3、 訪問陣列元素時,下標的取值範圍為 0 ≤ index < length,

參考資料

16樓:星願

定義整形陣列

int a[5];

int a = ;

int a[3][4];/*建立乙個有3行4列的二維陣列*/

printf("please enter a[i]");

for(i=0;i<5;i++)

scanf("%d",&a[i]);

可以完成a[5]的陣列輸入

17樓:育知同創教育

主函式內定義的陣列在堆疊段中分配記憶體。

全域性變數陣列在資料段中分配記憶體。

一般資料段比堆疊段大很多,

所以堆疊段分配不了的記憶體,資料段可以分配

(1)在堆疊段中分配記憶體,由於太大無法分配,所以錯誤。

(2)在資料段中分配記憶體,資料段可以分配,無錯誤。

(3)陣列比(1)需要的記憶體少,在堆疊段大小範圍內,可以分配,無錯誤(4)同(3)

18樓:匿名使用者

int a[3];/*建立乙個有3個元素的一維陣列*/

int a[3][4];/*建立乙個有3行4列的二維陣列*/

int a[4][5][6];/*建立乙個有4層5行6列的三維陣列*/

19樓:匿名使用者

定義一維陣列:int a[n] 如:int a[3] ,表示這個陣列可以存三個數: 1 4 2

定義二維陣列: int a[m][n] 如 int a[2][3],標售這個陣列可以存2行三列 共6個數:

如:2 4 4

5 6 7

20樓:風了瘋了鋒了

如果是定義數

組,一維陣列就是int a[10];

型別說明符 陣列名[常量表示式];

二維陣列 int a[3][4];

型別說明符 陣列名[常量表示式] [常量表示式];

但我覺得這個比較好理解,難一點的就是關於陣列的輸入要用到for的迴圈語句

printf("please enter a[i]");

for(i=0;i<5;i++)

scanf("%d",&a[i]);

可以完成a[5]的陣列輸入

21樓:匿名使用者

例如定義整形陣列

int a[5];

int a = ;

22樓:

詳細了解c語言程式設計知識第七節-c語言陣列定義,標識與賦值

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

23樓:

這個簡單..

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

看看這個例程..

int main(void)

}類似這樣

24樓:匿名使用者

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

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

#include

int main()

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

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

25樓:匿名使用者

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

26樓:

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

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

C語言陣列定義位址分配問題,c語言陣列在記憶體中是怎麼分配的?

使用c語言程式設計,實際上使用的記憶體只有一種 虛擬記憶體。根據功能的不同在c語言中又將虛擬記憶體為分三類 棧區 堆區 靜態資料區,無論單一變數還是陣列,其記憶體分配都是如此。其中,棧區 靜態資料區 堆區都會有編譯器負責分配 作業系統負責管理,程式設計師可以在堆區使用malloc 來動態分配堆記憶體...

c語言定義字串陣列,C語言 如何定義字串陣列

天方夜譚的哆啦a夢 c語言字串陣列中的每乙個元素均為指標,即有諸形如 ptr array i 的指標。由於陣列元素均為指標,因此ptr array i 是指第i 1個元素的指標。例 如二維指標陣列的定義為 char ptr array 3 擴充套件資料 字串陣列陣列元素表示方法 陣列元素的一般形式為...

c語言動態二維指標陣列,c語言動態二維指標陣列

對你的問題有點不懂,你是想說元素都是char型變數,如果是,可以這麼做 char array new char m n m和n的值都可以隨意改變 不知道是不是你想要的 維位址,指向二維陣列第0行位址 0開始計數 第1列 0開始計數 優先順序 所以表示式實際是 p 1 乘以 p 1 1 p指向值為 2...

c語言如何取陣列元素個數,請問在C語言中如何獲取乙個陣列裡存在多少個元素?

1 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 即可容納元素個數 但是通過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的,因為在子函式當中,陣列名會退化為乙個指標。2 例如 int data 4 length length sizeof data sizeof data 0 陣列佔...

關於C語言中陣列的定義

如果在參數列中,int 實際會被轉換成int 不信你可以試試這個程式 include void f int b 10 void main 至於為什麼,就是為了防止傳遞陣列,c認為有乙個原始的,就操作它好了,如果你覺得要另立副本,就自己新分配記憶體,或者用自己auto分配的記憶體,將內容複製過來。當然...