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

時間 2021-08-30 09:42:40

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語言初始化陣列時一定要使用靜態儲存嗎

ansi iso c之前,對陣列的一次性初始化必須要求陣列被宣告為靜態的,樓上說static和extern與變數的使用範圍有關,沒錯,但不是這裡要使用的含義,這裡靜態 全域性變數預設為靜態的 指的是該變數只初始化一次。全域性變數肯定是只初始化一次的,所以這主要是針對函式塊裡面宣告的變數來說的,就是說...

你為什麼一定要創業,我為什麼一定要創業的理由

作為男人 你的一生 一定要經歷一次創業 因為只有這樣的人生才是完整的 因為只有經歷了一次創業 你才知道你的潛力有多大 馬雲第1次高考落榜的時候 最想幹的是酒店服務員 你想它能幹得了嗎 後來他還想當警察 肯定也當不了 因為有損警容 後來好不容 乙個人一輩子不長,在有生之年拼一把,做點充實的事會讓這一生...

為什麼有的廠家要求噴繪檔案的格式一定要cdr呢

熊爸精選作文分享 因為cdr是向量圖,意思是放大多少倍都不會失真,這樣去實際噴繪的尺寸就隨意調整。如果是點陣圖 比如jpg,bmp等,放大後就出現鋸齒,再拉大就是馬賽克的啦。so 格式沒什麼要求吧?jpg就可以啊!沒聽過一不定式要cdr的啊!估計騙你的啊 因為這種格式好像是一種噴繪機專用的格式 jp...