當前位置:首頁 » 編程語言 » c語言數組的大小在何時確定
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數組的大小在何時確定

發布時間: 2022-07-24 03:56:02

『壹』 c語言數組的大小問題

先用循環統計的方式獲得數量(作為數組長度),然後賦值給一個const常量,最後用這個常量作為數組長度即可。
如果無法估計需要的最大長度,可以直接把數組長度定義得盡可能地長,多餘的部分就不用了就行了。

如果說你要的是不定長的數組(動態數組)的話,還是用集合(或者叫容器)來替代數組(靜態數組)比較好。(如STL中的容器vector就可以實現,另外字元串可以使用String類類型,但這些必須在C++裡面做)

『貳』 C語言定義數組一定要指定大小嗎

是的,c中數組定義時要指定大小。

當然,萬事也不是絕對的。例如:1.作為形參的時候,可以不指定,因為在函數調用的時候,數組會轉為指針的。2.當為字元串數組時,char ST[]="hello word"這兒定義了一個ST字元數值,不需要你自己去指定大小,系統會自動生成長度為11.

『叄』 請教:C語言中,如何確定整個二維數組的大小

C語言中的二維數組是「一維數組的數組」
向函數中傳遞的時候,最外層的數組直接翻譯成指針,傳遞時傳遞其首地址,數組是傳不進去的。
所以
s是指針,sizeof(s) = 4
*s是一個長度為16個char的一維數組,長度是16。

『肆』 C語言裡面 數組都要事先定義長度嗎 知道

在數組一章中,曾介紹過數組的長度是預先定義好的,
在整個程序中固定不變。C語言中不允許動態數組類型。例如:
int
n;scanf("%d",&n);int
a[n];
用變數表示長度,想對數組的大小作動態說明,
這是錯誤的。但是在實際的編程中,往往會發生這種情況,
即所需的內存空間取決於實際輸入的數據,而無法預先確定。對於這種問題,
用數組的辦法很難解決。為了解決上述問題,C語言提供了一些內存管理函數,這些內存管理函數可以按需要動態地分配內存空間,
也可把不再使用的空間回收待用,為有效地利用內存資源提供了手段。
其它文獻中所提到的"動態數組",指的就是利用內存的申請和釋放函數,在程序的運行過程中,根據實際需要指定數組的大小.其本質是一個指向數組的指針變數.常用的內存管理函數有以下三個:
1.分配內存空間函數malloc
2.分配內存空間函數
calloc
3.釋放內存空間函數free

『伍』 c語言中數組的大小可以改變嗎

數組大小一旦確定就不能改變。

數組長度必須在編譯時確定,可以使用malloc函數在程序運行時動態分配所需「數組」長度。定義數組需要指定數組的長度,然後系統會根據這個長度分配固定的內存大小。

當出現intarray[10];這種情況的時候,是不可以變的,這時候變數的存儲空間在棧區。當intn;cin>>n;intarray=newint[n];的時候,數組可以根據n輸入的大小去分配內存,這時候數組存在堆區。

(5)c語言數組的大小在何時確定擴展閱讀

長度為0的數組在標准C和C++中是不允許的,如果使用長度為0的數組,編譯時會產生錯誤,提示數組長度不能為0。但在GNUC中,這種用法卻是合法的。

它的最典型的用法就是位於數組中的最後一項,這樣做主要是為了方便內存緩沖區的管理。如果長度為0的數組換為指針,那麼在分配內存時,需採用兩步:

1、需為結構體分配一塊內存空間;

2、再為結構體中的成員變數分配內存空間。這樣兩次分配的內存是不連續的,需要分別對其進行管理。當使用長度為0的數組時,則是採用一次分配的原則,一次性將所需的內存全部分配給它。相反,釋放時也是一樣的。

『陸』 C語言中第一維數組的大小的准確定義

ANSI C89標准中規定,一個數組的尺寸(下標)必須是一個整型常量表達式以便於在編譯時計算大小,而這里的所謂常量(或者常量表達式的運算結果),一般是指unsigned int。

16位編譯器(比如Turbo C)中,unsigned int為16位,因此數組最多32767個數據。

32位編譯器(比如Visual C++ 6.0)中,unsigned int為32位,因此數組最多4294967295個數據。

以上結論為理論值。

實際上,在VC++中,我們定義一個259025元素的整型數組,雖然可以編譯通過,但是我們仍將得到一個運行時錯誤(runtime error)。這主要跟堆和棧的大小有關,詳細情況請查閱操作系統相關資料。

錯誤代碼範例:

// VC++ 6.0 中
void main()
{
int a[259025]; // 運行時錯誤,259024是ok的。
char b[259025]; // ok。
char c[1036097]; // 運行時錯誤,1036096是ok的。
}

// TC2.0 中
void main()
{
int a[32768]; // 編譯錯誤,32767是ok的。
char b[65536]; // 編譯錯誤,65535是ok的。
}

『柒』 c語言如何確認指針數組的大小

同學,你理解有誤哇,這個程序是把一些字元串常量賦值給了指針,這些字元串常量在內存中是靜態存儲的,只是指針指向了他們的「頭」。
比如 char *p=「BASIC」;
內存中會被會分配一段連續空間存放 'B','A','S','I','C','\0' 這6個數據,讀取時以 『\0' 作為結束。
strcmp函數是逐個比較字元串中每個字元的ASCII碼值,若前者比後者大返回值為正,反之為負,相等則為0.