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語言中又將虛擬記憶體為分三類 棧區 堆區 靜態資料區,無論單一變數還是陣列,其記憶體分配都是如此。其中,棧區 靜態資料區 堆區都會有編譯器負責分配 作業系統負責管理,程式設計師可以在堆區使用malloc 來動態分配堆記憶體... 天方夜譚的哆啦a夢 c語言字串陣列中的每乙個元素均為指標,即有諸形如 ptr array i 的指標。由於陣列元素均為指標,因此ptr array i 是指第i 1個元素的指標。例 如二維指標陣列的定義為 char ptr array 3 擴充套件資料 字串陣列陣列元素表示方法 陣列元素的一般形式為... 對你的問題有點不懂,你是想說元素都是char型變數,如果是,可以這麼做 char array new char m n m和n的值都可以隨意改變 不知道是不是你想要的 維位址,指向二維陣列第0行位址 0開始計數 第1列 0開始計數 優先順序 所以表示式實際是 p 1 乘以 p 1 1 p指向值為 2... 1 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 即可容納元素個數 但是通過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的,因為在子函式當中,陣列名會退化為乙個指標。2 例如 int data 4 length length sizeof data sizeof data 0 陣列佔... 如果在參數列中,int 實際會被轉換成int 不信你可以試試這個程式 include void f int b 10 void main 至於為什麼,就是為了防止傳遞陣列,c認為有乙個原始的,就操作它好了,如果你覺得要另立副本,就自己新分配記憶體,或者用自己auto分配的記憶體,將內容複製過來。當然...C語言陣列定義位址分配問題,c語言陣列在記憶體中是怎麼分配的?
c語言定義字串陣列,C語言 如何定義字串陣列
c語言動態二維指標陣列,c語言動態二維指標陣列
c語言如何取陣列元素個數,請問在C語言中如何獲取乙個陣列裡存在多少個元素?
關於C語言中陣列的定義