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

2021-04-15 12:27:06 字數 5473 閱讀 1118

1樓:曉喋

1、c語言e68a8462616964757a686964616f31333365646235中不支援。

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

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

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

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

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

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

2樓:曠起雲戊靜

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

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

你可以如下申請

int**u

=(int

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

i=0;

i

i++)

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

3樓:匿名使用者

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

4樓:程振

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

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

# define m 100

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

5樓:墨派

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

你的問題可以這樣解決:

先算出m,n的值,

再用new去申請

如:int a;

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

6樓:

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

u[100][100]

7樓:匿名使用者

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

你可以如下申請

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

for(int i=0; i

8樓:匿名使用者

動態分配記憶體,c用malloc

c++,用new

9樓:cabbage包菜

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

在c99中提出了變長

zhi陣列,即為val,意dao

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

例如 int val = 5;

int a[val];

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

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

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

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

10樓:鑽時封芯

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

11樓:劼翾

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

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

delete [ ]p

好了,給分吧。呵呵

12樓:匿名使用者

c語言中不支援來。

c++中支援變長自

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

dao薦使用。

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

關於c語言陣列的方括號中能不能使用變數的問題。

13樓:四舍**入

方括號裡必須是一個大於零的整數常量或者常量表示式。

常量表示式(const experssion):是指值不會改變專 並且在編譯過屬程就能得到計算結果的表示式。字面量屬於常量表示式,用常量表示式初始化的const物件也是常量表示式。

一個物件(或表示式)是不是常量表示式由它的資料型別和初始值共同決定。

const int a =1; //常量表示式cosnt int b=a+1; //常量表示式int c=2; //初始值是字面值常量,當c資料型別是普通int。

14樓:匿名使用者

陣列的方括號復有兩種使用制情況。

1 定義。

當用於定義時,bai陣列方括du號中的是陣列含有的元素個zhi數,即定dao

義了陣列的規模。

這種情況下,按照ansi c的標準,是不可以用變數的。

不過目前有些編譯器支援了c99及以上規範,在c99下,c語言陣列定義時可以使用變數。

至於編譯器是否支援,定義一個以變數為規模的陣列,編譯一下,如果能通過,那麼就是支援的,反之則是不支援。

由於並不是所有編譯器支援,這樣的**就不易於移植,所以不推薦使用這種寫法。如果一定需要用動態值,可以採用動態陣列的方式。

2 取值。

當取陣列a的第n個元素值時,可以使用a[n]的方式。

這種取值操作的情況下,是可以使用變數的。對此,任意版本的c語言都沒有做限制。

不過其中的變數只能為整型系列的型別,比如char, short, int, long等,或者對應的無符號型別。

15樓:匿名使用者

其實baic語言的較新版本標準

是支援du

int n=5;

int a[n];

的用法的,只是vc一直只zhi支援舊版本的標準dao而已……不過對回於這個問題,原答因不是這個。int a[n];是物件宣告,a[i++]=i;是表示式中的運算,二者是完全不同的東西……

16樓:匿名使用者

好多大學課本教程是老版的c語言了,在vc++6.0編譯器裡(好多年前的編譯器了,已經沒有更新了),int a[n]是錯誤的,用別的編譯器就沒事,比如dev c++

17樓:匿名使用者

這句話你要仔細理解,人家說的是對陣列的「定義」不能用動態定義,就是說陣列在定義時不能依賴於程式執行過程中變數的值,第二個例子並不是對陣列定義而是陣列運算

18樓:匿名使用者

是宣告的時候不能用變數去指定初始大小,訪問的時候是可以的

19樓:匿名使用者

陣列,沒好好看啊,定義和使用的區別

20樓:為明天_小樂

上面的為一個陣列的宣告,而n為5,如果按照main中的執行順序的話看上去是沒有問題的..並且版有的編譯權器也支援(例如dev--c++)但是a是一個陣列,在編譯的時候其需要一個特定的大小來讓系統為其分配記憶體空間,,它與下面的i++不同,在i++操作之前,a陣列的大小已經固定了,所以可以通過.

21樓:匿名使用者

只是定義

bai的時候不能用變數

du。a[i++]這是你前面zhi已經定義好了的dao a[10]。記住!!

a[ ]方括號內可以專用變數,只是定義屬的時候不能用變數。如果一定要用字母表示可以這樣寫:#define n 5

int main()

n其實也是前面定義的一個常量。

22樓:匿名使用者

int a[n],是在定義一個陣列,而陣列的長度為n,n是一個變數,這在c語言是不允許,c語言不支回持定義變長答陣列,因為在編譯的時候,系統無法知道陣列的長度是多少,也就無法為這個陣列分配一個空間。

解決的方法有:

1、#define n 5

int main()

2、#include

int main()

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

23樓:

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

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

24樓:

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

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

25樓:匿名使用者

c語言中可以定

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

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

char *charnew;

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

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

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

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

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

關於C語言中陣列的定義,C語言中如何定義陣列

一樣的,陣列在做函式引數時,傳遞給函式的都是陣列的首指標,哪怕你的函式這樣寫 void swp int p 在呼叫的時候swp array 也是可以的。只要傳遞給函式一個陣列的首指標就行了,而你的array正好是陣列的首指標。char s 10 123 是表示前三個元素分別是1,2,3但s 2 0 ...

c語言中如何定義二維陣列,C語言中如何定義一個二維陣列

int a 2 3 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 表示兩行三列 include main int i,j,total 0 for i 0 i 3 i printf n printf total d n total 用指標new出來 二維陣列定義必須規定列 i...

C語言中怎樣定義常量變數,C語言中是如何定義常量的啊

常量的定義用const關鍵字 const 型別名 常量名 值 變數的定義是 型別名 變數名 c語言中是如何定義常量的啊 我們在用c程式設計時有時需要定義不變的變數,即常量,有兩種方法。例如 定義常量pi的兩種方式 1.define pi 3.1415926f 2.const float pi 3.1...