1樓:匿名使用者
不可以,如果不能確定長度,請用stl庫裡的list,map,set等資料類
或者開的陣列開的大一些,保證你不回會越界,答多餘的部分不適用就好在定義的陣列的時候,可以通過變數定義長度如:
scanf("%d", arraylen);
int data = new int[arraylen];
c語言中定義陣列時可以不定義長度嗎,這樣:uint8 array[]。看到一個函式的引數是這樣定義的
2樓:
函式引數可以這樣定義,表明該引數是一個陣列的指標,至於陣列有多少個元素可以不知道。
但是在程式段落中不可以這樣定義,不知道有多少個元素,編譯器就不知道到底要為這個陣列分配多少記憶體,編譯器會報錯。
3樓:
不能=。= 函式的引數是因為之定義他的形參而已,比如 int x啊的只是形式引數而已,只是告訴函式他的引數是什麼型別額,以及如何在函式中呼叫
而你在正式使用的話一定要進行定義。
4樓:匿名使用者
c語言中可以定
bai義個數du不確定的動態數zhi組,但不是用uint8 array;這樣來定dao義回的,這樣會報答錯。定義個數不確定的動態陣列必須先宣告一個指標,然後用malloc為這個指標分配一段連續的空間,然後退出程式的時候要記得使用free釋放這些變數空間,否則會造成記憶體洩露。
比如你要定義一個字元型的動態陣列,可以先宣告一個字元型指標:
char *charnew;
然後在需要定義陣列的時候,用下面語句開闢一定量的連續空間:
charnew=(char*)malloc(10*sizeof(char));
這樣你就可以像一般陣列一樣,用charnew[1]來訪問陣列中的元素;
當退出程式時,你要使用:
free(charnew);來釋放資料空間。
c語言中陣列長度不能用變數定義嗎?
5樓:曉喋
1、c語言e68a8462616964757a686964616f31333365646235中不支援。
c++中支援變長陣列(你可以自行度娘變長陣列和alloca函式),但是因為其實在棧上分配,不被推薦使用。做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。
2、c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。
3、、在陣列一章中,曾介紹過陣列的長度是預先定義好的, 在整個程式中固定不變。c語言中不允許動態陣列型別。例如:
用變數表示長度,想對陣列的大小作動態說明, 這是錯誤的。但是在實際的程式設計中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題, 用陣列的辦法很難解決。
4、為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間, 也可把不再使用的空間**待用,為有效地利用記憶體資源提供了手段。 其它文獻中所提到的"動態陣列",指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小.其本質是一個指向陣列的指標變數.
常用的記憶體管理函式有以下三個:分配記憶體空間函式malloc;分配記憶體空間函式 calloc;釋放記憶體空間函式free。
6樓:曠起雲戊靜
只是定義來陣列的話是不行的,你源百可以把bai陣列定度du義成指標,用zhic語言中的問
malloc來分配空間,因為dao這是你手動分配的,在不用之後答要手動釋放。
你可以如下申請
int**u
=(int
**)malloc(sizeof(int*)*m);for(int
i=0;
i i++) 這樣專u這個指標就相當於屬一個可變的2維陣列u[m][n]了釋放時用free 7樓:匿名使用者 你可以試試用指標呀,或者是把m,n定義得足夠大。陣列的長度在定義的時候必須是一個確定的值。 8樓:程振 陣列的大復小不能用變數表制示的哦,因為 在編譯連線期間記憶體要按照你制定的長度給陣列分配相應的記憶體空間,如果是變數的話就沒有辦法給它分配了,你可以用符號常量來解決,在開頭用 # define m 100 # define n 100 然後在程式中就可以定義u[m][n]二維陣列了,當不一定非要是100,可以是任何一個正整數。 9樓:墨派 陣列大小要求是常量!當然不能是變數了! 你的問題可以這樣解決: 先算出m,n的值, 再用new去申請 如:int a; int *pa=new a[m][n]; 10樓: 先定義一個足夠大的二維陣列 例: u[100][100] 11樓:匿名使用者 只是定義陣列的話是不行的,你可以把陣列定義成指標,用c語言中的 malloc來分配空回間,因為這是你手動答分配的,在不用之後要手動釋放。 你可以如下申請 int **u = (int **)malloc(sizeof(int *) * m); for(int i=0; i 12樓:匿名使用者 動態分配記憶體,c用malloc c++,用new 13樓:cabbage包菜 定義陣列的時候,copy陣列的大bai小必須確定,並且是du整型。 在c99中提出了變長 zhi陣列,即為val,意dao 思是你可以用一個變數去代替陣列的大小。 例如 int val = 5; int a[val]; 變長陣列中的變,也只是說你可以用變數去定義陣列,但是變長陣列的大小在建立後就是不變得, 而且變長陣列必須的自動的儲存類。 由於變長陣列的限制太多了,很少人去使用他。 所以對你這個問題,需要使用動態記憶體,即用malloc calloc 這類的函式。 14樓:鑽時封芯 只是不行的,一般也不必這麼做 15樓:劼翾 不能,這你可以使用動態儲存分配。方法是: int *p=new int [m][n]中間應用,用完後記得使用 delete [ ]p 好了,給分吧。呵呵 16樓:匿名使用者 c語言中不支援來。 c++中支援變長自 陣列(你可以自行度bai娘變長陣列和dualloca函式),但是因為其實在zhi棧上分配,不被推 dao薦使用。 做為解決方案,你可以使用c式的malloc函式或者c++式的new函式來在堆上動態分配記憶體,這樣長度是完全可以自定的。 c語言中定義陣列長度與不定義陣列長度有什麼區別 17樓: c語言是低階的高階語言,不會提示越界,你可以在定義5個長度呃字元陣列裡面輸入7個字元,但是定義長度並不是沒用的,編譯器會專門開闢5個字元長度留給這個陣列,是專用的,因此你輸入7個字元後,後兩個字元其實是超標領養,用了別人家的資源(可能佔用了其他變數的空間),並且很容易就沒娘要了(容易出錯)。如果程式簡單,或許出錯的機率比較小,例如你只定義了這個陣列的話,也不會有別的東西來干擾他,他也不會干擾別的東西,但是程式一旦複雜起來,記憶體空間比較擁擠,那麼出錯是難免的。因此有時我們要自己去實現越界提示這個功能,但是顯然這樣會降低程式的效率。 一樓的答案也值得參考,他說的我就不說了。 c語言中可以定義不定長度的陣列(即陣列長度由變數確定)嗎? 18樓:匿名使用者 不可以,陣列在建立時長度已經確定了,而且建立後也無法更改陣列的長版度,樓上說的權malloc動態申請的記憶體也是已確定的,你都不能在 不破壞原有資料的情況下改變其大小。 那怎麼儲存未知大小的資料呢,在儲存後怎樣能隨意的對其新增、更改、刪除、查詢等一系列操作呢?只用簡單的陣列肯定不行,需要用到別的資料結構,如連結串列、二叉樹等等,總有一款適合你。在大家學到資料結構與演算法的時候 ,一切難題都將迎刃而解。 最後補充一點,樓上有人說陣列的長度不能用變數來確定,這是錯誤的。 c中有 變長陣列 的概念呀(c99標準),「變長」的意思就是 可以用變數來指定陣列的長度,而陣列一旦建立 長度就無法變化了,而且變數必須賦值在先,變長陣列才能建立。某些人不能因為無法正確的設定編譯器支援c99標準,而否定了 變長陣列 這個用法。 19樓:匿名使用者 可以使用指標,申請動態空間,完成這個操作,具體的東西,你可以查資料,或者看書,一般的c語言書上都有說明,而且肯定比我們講的詳細的多 20樓:匿名使用者 陣列下標只能是確定的數,不可以用陣列 用指標可以,用的時候就申請記憶體空間 看看malloc他的用法 21樓:匿名使用者 一維陣列定義方式 為: 型別說明符 陣列名【常量表示式】,常量表示式可以版包括常量和符號常量,但權絕不能包含變數。換句話說,c語言中不允許對陣列的大小做動態定義,即陣列的大小不依賴程式運過程中變數值;如: int n; scanf("%d",&n); int a[n]; 這是不對的!!!! 22樓:匿名使用者 有啊,可以看下動態分配記憶體空間 c語言支援一維陣列和多維陣列。如果一個陣列的所有元素都不是陣列,那麼該陣列稱為一維陣列。在c語言中使用陣列必須先進行定義,一維陣列的定義方式為 型別說明符 陣列名 常量表示式 其中,型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號,方括號中的常量表示式表示資料元素的個數... 這段 是統計你輸入裡邊0 9的數字個數,輸入的字元用asc碼錶示,c的變數指代輸入的字元,那麼c 0 c 9 這個條件就判斷輸入的是否為數字,c 0 是一個表示式,將會返回你所輸入字元的與字元 0 的差值,例如你輸入的值是字元 1 這個表示式為 1 0 兩個在asc碼中差值為1,故shuzi中下標為... 這個問題是這樣的了,因為你的陣列定義的是二維大小是20 20 地址空間已經分配好了,而但你輸入的m和n的值小於20的時候,你只是先給第一維賦值,如果輸入的數字大於20,在對第二維賦值,但你輸入一些小的m和n時,其實二維陣列你還沒有賦值,他們的值還是你預設給的0啊,而當你用二維陣列去讀數的時候 a 0...c語言陣列的定義
C語言中陣列問題
C語言實引數組與形引數組問題,關於c語言中陣列作為函式引數的函式之間呼叫問題