C語言不定長數(shù)組及初始化方法
C語言不支持不定長數(shù)組,要么malloc,要么在動(dòng)態(tài)的指定它的長度
動(dòng)態(tài)數(shù)組不能初始化,可使用memset
1.int* p = (int*)malloc(num);
2.int num = 5;
arr[num];
若使用arr[],則需要在后面對齊進(jìn)行初始化,來指定長度,否則編譯可以通過,但是默認(rèn)只有一個(gè)單元,超過一個(gè)單元的長度,在后面程序的運(yùn)行中有可能會被沖掉
int arr[] = {0};//定義了一個(gè)單元的數(shù)組,并不是不定長數(shù)組
最好不用使用arr[] = {0}來定義數(shù)組,定義數(shù)組之前應(yīng)要指定長度
int arr[256] = {0};
int a[256]={0};并不是把a(bǔ)的所有元素初始化為0,int a[256]={1};也不是把a(bǔ)所有的元素初始化為1.
數(shù)組可以用一個(gè)列值來初始化,例如
int v1[] ={1,2,3,4};
char v2[]={'a','b','c',0};
當(dāng)數(shù)組定義時(shí)沒有指定大小,當(dāng)初始化采用列表初始化了,那么數(shù)組的大小由初始化時(shí)列表元素個(gè)數(shù)決定。所以v1和v2分別為 int[4] 和char[4]類型。如果明確指定了數(shù)組大小,當(dāng)在初始化時(shí)指定的元素個(gè)數(shù)超過這個(gè)大小就會產(chǎn)生錯(cuò)誤。例如:
char v3[2] ={'a','b',0}; //錯(cuò)誤:太多的初始化值了
char v3[3] ={'a','b',0}; //正確
如果初始化時(shí)指定的的元素個(gè)數(shù)比數(shù)組大小少,剩下的元素都回被初始化為 0。
例如
int v5[8]={1,2,3,4};
等價(jià)于
int v5[8]={1,2,3,4,0,0,0,0};
注意沒有如下形式的數(shù)組賦值:
void f()
{
v4={'c','d',0}; //錯(cuò)誤:不是數(shù)組賦值
}
顧名思義,集合(aggregate)就是多個(gè)事物聚集在一起,這個(gè)定義包括混合類型的集合:像struct和class等,數(shù)組就是單一類型的集合。
初始化集合往往既冗長又容易出錯(cuò),而C++中集合初始化(aggregate initialization)卻變得很方便而且很安全。當(dāng)產(chǎn)生一個(gè)集合對象時(shí),要做的只是指定初始值就行了,然后初始化工作就由編譯器去承擔(dān)了。這種指定可以用幾種不同的風(fēng)格,它取決于正在處理的集合類型。但不管是哪種情況,指定的初值都要用大括號括起來。
比如一個(gè)內(nèi)部類型的數(shù)組可以這樣定義:
int a[5] = { 1, 2, 3, 4, 5 };
如果給出的初始化值多于數(shù)組元素的個(gè)數(shù),編譯器就會給出一條出錯(cuò)信息。但如果給的初始化少于數(shù)據(jù)元素的個(gè)數(shù),那將會怎么樣呢?
例如:
int b[6] = {0};
這時(shí),編譯器會把第一個(gè)初始化值賦給數(shù)組的第一個(gè)元素,然后用0賦給其余的元素。注意,如果定義了一個(gè)數(shù)組而沒有給出一列初始值時(shí),編譯器并不會去做初始化工作。所以上面的表達(dá)式是將一個(gè)數(shù)組初始化為零的簡潔方法。
以上這篇C語言不定長數(shù)組及初始化方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 標(biāo)準(zhǔn)模板庫 STL 順序容器詳解
這篇文章主要介紹了C++ 標(biāo)準(zhǔn)模板庫 STL 順序容器詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
C++?Boost?Accumulators累加器詳細(xì)講解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11
Qt實(shí)現(xiàn)定時(shí)器的兩種方法分享
這篇文章主要為大家詳細(xì)介紹了Qt中實(shí)現(xiàn)定時(shí)器的兩種不同方法,文中的示例代碼講解詳細(xì),對我們了解Qt有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-11-11
利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計(jì)圖
這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計(jì)圖的繪制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定的幫助,感興趣的可以了解一下2022-05-05
c++中struct和class的區(qū)別小結(jié)
在C++中,class和struct都是用于定義自定義數(shù)據(jù)類型的關(guān)鍵字,本文主要介紹了c++中struct和class的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

