c語言數組個數
① c語言 結構體數組的個數如何自己定義
C99標准出來以前,C語言不支持動態定義數組大小,只能採用動態分配指針方式來完成動態數組的個數定義。如:
structst{
intx,y;
charstr[10];
};
structst*array;
intn;
printf("inputn:");scanf("%d",&n);
array=(structst*)malloc(n*sizeof(structst));//動態分配n個結構體空間,接下來array的操作,與數組操作是相同的,如:array[0].x=1;
C99以後,C語言標准開始支持動態定義數組,但動態數組,在其確定個數之後,在其生命期中,就不可變了。如:
structst{
intx,y;
charstr[10];
};
intn;
printf("inputn:");scanf("%d",&n);
structstarray[n];//定義動態數組
array[0].x=1;
② 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語言如何取數組元素個數
不能判斷,因為C沒有提供判斷數組元素個數的功能。由於C不檢查數組的邊界,所以必須事先知道元素個數、所佔位元組數和元素類型三個要素中的兩個才能確定另外一個,否則是無法判斷的。比如有知道數組a[]佔40個位元組,又知道a[]是int型數組,那麼元素個數就是40/sizeof(int)。其中sizeof(int)是用操作符sizeof來求得一個int類型所佔位元組數。