c語言裡面 陣列都要事先定義長度嗎

2021-04-15 12:27:05 字數 5456 閱讀 9302

1樓:匿名使用者

陣列必bai須是固定長度du,但是可以通過動態zhi記憶體申請來實dao現你的要求。內

unsigned int *pallscores;

main()}

2樓:plus彭路

在陣列一

bai章中,曾介紹過du陣列的長度zhi是預先定義好的, 在整個程dao序中固定不變專。屬c語言中不允許動態陣列型別。例如:

用變數表示長度,想對陣列的大小作動態說明, 這是錯誤的。但是在實際的程式設計中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題, 用陣列的辦法很難解決。

為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間, 也可把不再使用的空間**待用,為有效地利用記憶體資源提供了手段。 其它文獻中所提到的"動態陣列",指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小.其本質是一個指向陣列的指標變數.

常用的記憶體管理函式有以下三個:

1.分配記憶體空間函式malloc

2.分配記憶體空間函式 calloc

3.釋放記憶體空間函式free

3樓:百載千番

是的,而且要定義陣列型別。比如整數陣列就是: int a[k]; 其中a是陣列名,k是陣列長度

4樓:匿名使用者

c99中有動態

陣列,例如

int n;

scanf("%d", &n);

int array[n];

c89不能這麼用

///////////////////////////////////

也可以動態分配記憶體內。malloc

int *array = 0, num, i;

printf("please input the number of element: ");

scanf("%d", &num);

// 申請容動態陣列使用的記憶體塊

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

5樓:邱桂新

我給你一個bai例子du,你執行一下就明白zhi了:

#include

#include

int main()

6樓:花香天地

c語言裡定義陣列必須確定其長度,如:int arr[n];其中n必須是一個確定的正整數。如果想實現動態陣列效果,那就利用連結串列吧,或者使用陣列轉值的方法。

c語言中定義陣列時可以不定義長度嗎,這樣:uint8 array[]。看到一個函式的引數是這樣定義的

7樓:

函式引數可以這樣定義,表明該引數是一個陣列的指標,至於陣列有多少個元素可以不知道。

但是在程式段落中不可以這樣定義,不知道有多少個元素,編譯器就不知道到底要為這個陣列分配多少記憶體,編譯器會報錯。

8樓:

不能=。= 函式的引數是因為之定義他的形參而已,比如 int x啊的只是形式引數而已,只是告訴函式他的引數是什麼型別額,以及如何在函式中呼叫

而你在正式使用的話一定要進行定義。

9樓:匿名使用者

c語言中可以定

bai義個數du不確定的動態數zhi組,但不是用uint8 array;這樣來定dao義回的,這樣會報答錯。定義個數不確定的動態陣列必須先宣告一個指標,然後用malloc為這個指標分配一段連續的空間,然後退出程式的時候要記得使用free釋放這些變數空間,否則會造成記憶體洩露。

比如你要定義一個字元型的動態陣列,可以先宣告一個字元型指標:

char *charnew;

然後在需要定義陣列的時候,用下面語句開闢一定量的連續空間:

charnew=(char*)malloc(10*sizeof(char));

這樣你就可以像一般陣列一樣,用charnew[1]來訪問陣列中的元素;

當退出程式時,你要使用:

free(charnew);來釋放資料空間。

c語言中定義一個陣列可以不寫陣列的長度嗎?

10樓:匿名使用者

不可以,如果不能確定長度,請用stl庫裡的list,map,set等資料類

或者開的陣列開的大一些,保證你不回會越界,答多餘的部分不適用就好在定義的陣列的時候,可以通過變數定義長度如:

scanf("%d", arraylen);

int data = new int[arraylen];

c語言中定義陣列長度與不定義陣列長度有什麼區別

11樓:

c語言是低階的高階語言,不會提示越界,你可以在定義5個長度呃字元陣列裡面輸入7個字元,但是定義長度並不是沒用的,編譯器會專門開闢5個字元長度留給這個陣列,是專用的,因此你輸入7個字元後,後兩個字元其實是超標領養,用了別人家的資源(可能佔用了其他變數的空間),並且很容易就沒娘要了(容易出錯)。如果程式簡單,或許出錯的機率比較小,例如你只定義了這個陣列的話,也不會有別的東西來干擾他,他也不會干擾別的東西,但是程式一旦複雜起來,記憶體空間比較擁擠,那麼出錯是難免的。因此有時我們要自己去實現越界提示這個功能,但是顯然這樣會降低程式的效率。

一樓的答案也值得參考,他說的我就不說了。

c語言中陣列長度不能用變數定義嗎?

12樓:曉喋

1、c語言e68a8462616964757a686964616f31333365646235中不支援。

c++中支援變長陣列(你可以自行度娘變長陣列和alloca函式),但是因為其實在棧上分配,不被推薦使用。做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。

2、c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

3、、在陣列一章中,曾介紹過陣列的長度是預先定義好的, 在整個程式中固定不變。c語言中不允許動態陣列型別。例如:

用變數表示長度,想對陣列的大小作動態說明, 這是錯誤的。但是在實際的程式設計中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題, 用陣列的辦法很難解決。

4、為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間, 也可把不再使用的空間**待用,為有效地利用記憶體資源提供了手段。 其它文獻中所提到的"動態陣列",指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小.其本質是一個指向陣列的指標變數.

常用的記憶體管理函式有以下三個:分配記憶體空間函式malloc;分配記憶體空間函式 calloc;釋放記憶體空間函式free。

13樓:曠起雲戊靜

只是定義來陣列的話是不行的,你源百可以把bai陣列定度du義成指標,用zhic語言中的問

malloc來分配空間,因為dao這是你手動分配的,在不用之後答要手動釋放。

你可以如下申請

int**u

=(int

**)malloc(sizeof(int*)*m);for(int

i=0;

i

i++)

這樣專u這個指標就相當於屬一個可變的2維陣列u[m][n]了釋放時用free

14樓:匿名使用者

你可以試試用指標呀,或者是把m,n定義得足夠大。陣列的長度在定義的時候必須是一個確定的值。

15樓:程振

陣列的大復小不能用變數表制示的哦,因為

在編譯連線期間記憶體要按照你制定的長度給陣列分配相應的記憶體空間,如果是變數的話就沒有辦法給它分配了,你可以用符號常量來解決,在開頭用

# define m 100

# define n 100 然後在程式中就可以定義u[m][n]二維陣列了,當不一定非要是100,可以是任何一個正整數。

16樓:墨派

陣列大小要求是常量!當然不能是變數了!

你的問題可以這樣解決:

先算出m,n的值,

再用new去申請

如:int a;

int *pa=new a[m][n];

17樓:

先定義一個足夠大的二維陣列 例:

u[100][100]

18樓:匿名使用者

只是定義陣列的話是不行的,你可以把陣列定義成指標,用c語言中的 malloc來分配空回間,因為這是你手動答分配的,在不用之後要手動釋放。

你可以如下申請

int **u = (int **)malloc(sizeof(int *) * m);

for(int i=0; i

19樓:匿名使用者

動態分配記憶體,c用malloc

c++,用new

20樓:cabbage包菜

定義陣列的時候,copy陣列的大bai小必須確定,並且是du整型。

在c99中提出了變長

zhi陣列,即為val,意dao

思是你可以用一個變數去代替陣列的大小。

例如 int val = 5;

int a[val];

變長陣列中的變,也只是說你可以用變數去定義陣列,但是變長陣列的大小在建立後就是不變得,

而且變長陣列必須的自動的儲存類。

由於變長陣列的限制太多了,很少人去使用他。

所以對你這個問題,需要使用動態記憶體,即用malloc calloc 這類的函式。

21樓:鑽時封芯

只是不行的,一般也不必這麼做

22樓:劼翾

不能,這你可以使用動態儲存分配。方法是:

int *p=new int [m][n]中間應用,用完後記得使用

delete [ ]p

好了,給分吧。呵呵

23樓:匿名使用者

c語言中不支援來。

c++中支援變長自

陣列(你可以自行度bai娘變長陣列和dualloca函式),但是因為其實在zhi棧上分配,不被推

dao薦使用。

做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。

C語言中怎麼定義動態的陣列長度,c語言中如何自定義陣列長度

include using namespace std int main int p,n,i cin n p new int n for i 0 i p i for i 0 i 什麼叫動態的陣列長度?c語言中怎麼定義動態的陣列長度 動態陣列長bai度,對於部du分新的編譯器,支zhi持c99的,可以...

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

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

c語言怎麼巨集定義2維陣列C語言怎麼巨集定義一個2維陣列

如果要強調是二維陣列,這樣也許更合適些 c c code?define m 80 define n 100 define array a,m,n a m n char array 1 例如 define m 80 define n 100 define array a,m,n a m n char ...