c語言中陣列最後數存不進的原因是什麼

2022-05-07 05:01:27 字數 4811 閱讀 2001

1樓:福建省寧德市

c語言中陣列定義時,能儲存的最大數目和陣列定義時的數目一樣,比如 int a[10] 可以儲存10個元素,但需要注意的是陣列中的元素是從a[0]到a[9],沒有a[10]這一項,所以不能給a[10]賦值,你的問題應該就是給類似a[10]這樣的元素賦值

2樓:你猜我猜哇擦猜

buffer-1說明buffer是首位址,即&buffer[0];

不減1的話,buffer+100==&buffer[100],陣列下標就越界了。

形象一點講,如果有2個數1,2;

通過1得到2,你不能用1+2,那就是3了;

要用1-1+2。

sizeof buffer是計算buffer這個陣列的位元組數;

而buffer有100個char型元素;

那麼sizeof buffer計算出來的就是100*(乙個char佔的位元組數)

sizeof (char)計算出來的值是1,因為理論上char應該佔乙個位元組;

綜上,sizeof buffer實際計算出來的就是陣列長度。在這裡也就是100

3樓:匿名使用者

原因一定是你**寫錯了。

c語言中陣列最後乙個數存不進的原因是什麼?

4樓:你猜我猜哇擦猜

buffer-1說明buffer是首位址,即&buffer[0];

不減1的話,buffer+100==&buffer[100],陣列下標就越界了。

形象一點講,如果有2個數1,2;

通過1得到2,你不能用1+2,那就是3了;

要用1-1+2。

sizeof buffer是計算buffer這個陣列的位元組數;

而buffer有100個char型元素;

那麼sizeof buffer計算出來的就是100*(乙個char佔的位元組數)

sizeof (char)計算出來的值是1,因為理論上char應該佔乙個位元組;

綜上,sizeof buffer實際計算出來的就是陣列長度。在這裡也就是100

在c語言程式設計中如何判斷乙個整數陣列的到了結尾,以及陣列的長度?

5樓:慧記錄

1、顯式地傳遞陣列長度,例如

void sot(int a, int n)2、隱含地傳遞陣列長度

1)在陣列前面儲存元資料

例如儲存長度n=255的字串,可以使用長度為n+1的陣列。陣列的第乙個元素儲存字串的長度,接著是字串的內容。

2)使用特殊元素在陣列尾部標記陣列的結束

最典型的例子就是c語言使用以nul('\0')字元結尾的字元陣列表示字串。使用null指標標記指標陣列的結束也是比較常見的用法。

c語言中函式引數只有陣列指標的情況下,是不能判斷陣列長度的。

c語言如何獲得陣列的長度?

總長度充溢單個的長度,即得陣列的個數。

int len = sizeof(unstartstring)/sizeof(unsigned int);

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

6樓:曉喋

1、c語言e68a8462616964757a686964616f31333365646235中不支援。

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

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

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

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

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

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

7樓:粗心對不起

c語言裡,所有變數空間都是在程式執行之初向系統申請的,包括指標,除了一些專動態申請方式如malloc函式。屬沒有申請的空間系統是不允許讀寫的。那麼如果乙個陣列大小是變數定義,則在程式執行前不能確定陣列大小,也就無法申請,故不允許。

所以,解決的辦法便是通過malloc函式,即

int a[n];

可改為int* const a = (int*)malloc(sizeof(int)*n);

這樣a變數就完全可以當作乙個陣列直接使用了,包括a[1]之類的。因為「」中括號運算子做的只是偏移其內的位址數並取值。如:

a[1]

等價於*(a + 1)

而const修飾符在星號之後,則表示指標在被宣告後不能改變,即只能指向這個獲取的空間,完全符合陣列的性質

綜上所述,如果需要變數控制長度的乙個陣列,類似「int a[n];」的,可改成「int* const a = (int*)malloc(sizeof(int)*n);」並直接作為陣列以方式使用。const可以去掉,但要保證使用時不改變a的指向

8樓:曠起雲戊靜

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

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

你可以如下申請

int**u

=(int

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

i=0;

i

i++)

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

9樓:匿名使用者

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

10樓:程振

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

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

# define m 100

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

11樓:墨派

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

你的問題可以這樣解決:

先算出m,n的值,

再用new去申請

如:int a;

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

12樓:

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

u[100][100]

13樓:匿名使用者

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

你可以如下申請

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

for(int i=0; i

14樓:匿名使用者

動態分配記憶體,c用malloc

c++,用new

15樓:cabbage包菜

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

在c99中提出了變長

zhi陣列,即為val,意dao

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

例如 int val = 5;

int a[val];

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

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

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

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

16樓:鑽時封芯

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

17樓:劼翾

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

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

delete [ ]p

好了,給分吧。呵呵

18樓:匿名使用者

c語言中不支援來。

c++中支援變長自

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

dao薦使用。

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

陣列指標和指標陣列的區別,c語言中的指標陣列和陣列指標的區別

int a 3 4 這個bai無需多說,就du是乙個二zhi維陣列。int p 4 就相當於daoint p 4 它就是乙個二維陣列的指標,可以 專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。p a int p 3 是指標陣列。說白了,就是定義了三個指標,分別為p 0 p...

c語言中關於字元陣列的長度問題,C語言中關於字元陣列的長度問題

r 這是個字元陣列,系統只為它分配了3個位元組的空間,但是strlen只有遇到 0 才會返回 於是它會向後繼續進行,直到有 0 這其實是越界 或許沒有,可能訪問的是q 10 了.你可以這樣 printf s n r 來檢視下列印的資訊。在我的上面 tc 是 3 3 3 9 哎。strlen 是在st...

c語言中的指標陣列和陣列指標的區別

指標陣列 陣列裡的每乙個元素都是指標如 p 10 裡面的 p 0 到 p 9 都是指標 可參考 http baike.陣列指標 指向乙個陣列的指標,如 arr 10 是乙個陣列,讓乙個指標指向這個陣列 p arr 訪問時通過 p n 或 p n 訪問元素值,n為元素索引值 可參考 http baik...