為什麼陣列的長度一定要是常量,C 陣列做引數為什麼一定要傳遞陣列長度?

2021-08-20 11:41:29 字數 2149 閱讀 5121

1樓:林

計算機要求在給陣列分配空間的時候知道你要分配多大,你說的是靜態陣列,因為這些陣列在編譯的時候就已經得讓計算機知道了,所以必須是常數。

另外一種是動態陣列

在c++ 裡面可以

int n=10;

int *arr = new int[n];

這樣可以在執行的時候才告訴計算機你要的陣列長度(動態陣列)依然沒有改變上面說的那個原則,你必須在申請陣列的時候明確告訴系統你要的陣列的長度

2樓:

陣列的長度一定要是常量,這是c語言的規定,別的計算機語言未必這樣規定。

陣列的長度為常量,便於編譯器給陣列變數分配儲存單元。

這些寫法都允許:

#define arrary_size 1024float a[arrary_size];

char b="1234567";

int c[3];

某些計算機語言,允許函式和子程式裡的陣列長度是變數。編譯器實際處理時,是動態分配。

所以,「陣列的長度一定要是常量」,只是c語言的規定。並非「道理」上的「必須」。

3樓:匿名使用者

希望以下關於const的問題分析能給你點幫助。。。

問題:const變數 & 常量

為什麼我象下面的例子一樣用一個const變數來初始化陣列,ansi c的編譯器會報告一個錯誤呢?

const int n = 5;

int a[n];

答案與分析:

1)、這個問題討論的是「常量」與「只讀變數」的區別。常量肯定是隻讀的,例如5, 「abc」,等,肯定是隻讀的,因為程式中根本沒有地方存放它的值,當然也就不能夠去修改它。而「只讀變數」則是在記憶體中開闢一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。

c語言關鍵字const就是用來限定一個變數不允許被改變的修飾符(qualifier)。上述**中變數n被修飾為只讀變數,可惜再怎麼修飾也不是常量。而ansi c規定陣列定義時維度必須是「常量」,「只讀變數」也是不可以的。

2)、注意:在ansi c中,這種寫法是錯誤的,因為陣列的大小應該是個常量,而const int n,n只是一個變數(常量 != 不可變的變數,但在標準c++中,這樣定義的是一個常量,這種寫法是對的),實際上,根據編譯過程及記憶體分配來看,這種用法本來就應該是合理的,只是 ansi c對陣列的規定限制了它。

3)、那麼,在ansi c 語言中用什麼來定義常量呢?答案是enum型別和#define巨集,這兩個都可以用來定義常量。

4樓:

陣列的長度確定儲存空間的大小,如果不是常量,電腦不知道該怎麼分配儲存空間,分配多大.電腦顯然還沒到智慧如人一樣.所以就只能是常量了.

c++陣列做引數為什麼一定要傳遞陣列長度?

5樓:千鋒教育

因為怕引起陣列越界,當陣列傳入一個函式後,就會用迴圈來處理。

比如下面的例子很好地說明了這個問題:

#include "iostream.h"

int max(int a,int size);//size是陣列的大小

int main()

;cout

max=a[i];

}return max;

}執行結果:98

6樓:想不出名字呀

因為a其實是一個指標,你肯定是用的x86,sizeof(a)表示的是地址的長度,x86地址長度為4個位元組,所以sizeof(a)/sizeof(int)為1。(通常說到sizeof(a)為陣列長度是c編譯過程中自動替換的,如果陣列作引數傳入函式將不會替換,所以此時函式裡的a就是一個指標)

7樓:白花戀歌

c++中函式的引數是陣列的時候,傳遞給函式的是一個指標,指向陣列的首地址,指標的大小一般固定為4b,一般情況下int 的大小也是4 ,所以。。。。陣列的長度不是必須的引數,你可以不傳遞,傳遞進來只是為了方便程式設計,函式裡面會用到,

不知道為什麼變成了紅色字。。- --

8樓:新泥稱

假如我是main函式, 你是reverse函式,我呼叫你,只告訴你 一個int 型別的陣列首地址,讓你處理, 你不知道長度你怎麼辦事.

又不是字串,字串由'\0'結束嘛所以不需要告訴長度.

c語言中使用常量定義陣列元素個數為什麼只能用define

c語言中陣列的維數表示陣列中元素的個數,在常規陣列中維數是必須要指明的,如果沒有指明,則必須在初始化列表中給定初始值,編譯器通過初始化列表來確定陣列的維數。int a 上面的 雖然沒有指明陣列的維數,但是編譯知道陣列a的維數是4 只有4個元素 要實現用變數定義陣列的元素個數即維數,可以使用mallo...

C 的一點問題。char name為什麼一定要用,主要的是為什麼程式出錯了。我想輸入名字,找出那個資訊。謝

include include using namespace std struct student int main cout 請輸入學生學號 cin xuehao cout 請輸入學生的姓名 cin mingzi for int i 0 i 3 i return 0 const int n 10...

為什麼一定要長大,為什麼一定要長大

看一看,可能對你有幫助哦o o 歌曲 想家 歌手 卓文萱 1986 那時候爸爸總是陪我一起走路上學去 那時候媽媽總是怕我淋到雨 有時我希望回到過去 握著它的手好安心 每天我在遠方擔心他的白髮 我想回家 為什麼一定要長大 為什麼世界變得好複雜 我不想獨自面對眼淚流下 我只想緊緊抱著他 有時候我喜歡和朋...