日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C语言的数组初始化「建议收藏」

發(fā)布時間:2023/12/15 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 C语言的数组初始化「建议收藏」 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是很基礎(chǔ)的東西,但基礎(chǔ)的重要性不言而喻,我敢肯定這個知識點我肯定曾經(jīng)了解過,但現(xiàn)在,我不敢確定,由此可見紀(jì)錄的重要性,這世界沒有什么捷徑,找對方向,然后不停重復(fù).所以從今天開始,我會比較詳細(xì)的紀(jì)錄這些比較小的知識點,其實還是有不少有意思的地方的.

寫這篇文章的起因在于<<COM技術(shù)內(nèi)幕>>第七章新東西太多,看的我目不暇接,所以在網(wǎng)上找了些例子看,其中就有一個例子中出現(xiàn)了這樣的語句:



wchar_twname[
128
]
=

{
0}
;

char
cname[
256
]
=

{
0}
;

我感興趣的是:
1.這種賦值的結(jié)果.
2.這種形式是否符合標(biāo)準(zhǔn)編碼規(guī)則?

我找到了如下資料,可能有助于對這個知識點的掌握.



/**/
/*
初始化值的個數(shù)可少于數(shù)組元素個數(shù).當(dāng)初始化值的個數(shù)少于數(shù)組元素個數(shù)時,前面的按序初始化相應(yīng)值,后面的初始化為0(全局或靜態(tài)數(shù)組)或為不確定值(局部數(shù)組).
*/

我相信上面的資料是C和C++語言的標(biāo)準(zhǔn)規(guī)范,但實際編譯器處理時,可能會和規(guī)范有所不同.因為編譯器原則上要遵從語言規(guī)范,但對于局部數(shù)組的不確定值到底是多少,怎么處理,編譯器就可以靈活處理.我測試了三種編譯器,其實編譯器賦予的值是固定的,都是0.

在這篇blog中 http://hi.baidu.com/widebright/blog/item/a024bc09631402256b60fbd0.html 談?wù)摿讼嗤脑掝},現(xiàn)對其摘錄如下:



/**/
/*
一直以為inta[256]={0};是把a的所有元素初始化為0,inta[256]={1};是把a所有的元素初始化為1.
調(diào)試的時查看內(nèi)存發(fā)現(xiàn)不是那么一回事,翻了一下《TheC++ProgrammingLanguage》總算有定論。PDF的竟然不然復(fù)制,就把它這章翻譯了,如下

5.2.1數(shù)組初始化
數(shù)組可以用一個列值來初始化,例如
intv1[]={1,2,3,4};
charv2[]={‘a’,’b’,’c’,0};
當(dāng)數(shù)組定義時沒有指定大小,當(dāng)初始化采用列表初始化了,那么數(shù)組的大小由初始化時列表元素個數(shù)決定。所以v1和v2分別為int[4]和char[4]類型。如果明確指定了數(shù)組大小,當(dāng)在初始化時指定的元素個數(shù)超過這個大小就會產(chǎn)生錯誤。例如:
charv3[2]={‘a’,’b’,0};//錯誤:太多的初始化值了
charv3[3]={‘a’,’b’,0};//正確

如果初始化時指定的的元素個數(shù)比數(shù)組大小少,剩下的元素都回被初始化為0。例如
intv5[8]={1,2,3,4};
等價于
intv5[8]={1,2,3,4,0,0,0,0};

注意沒有如下形式的數(shù)組賦值:
voidf()
{

v4={‘c’,’d’,0};//錯誤:不是數(shù)組賦值
}
如果你想這樣的復(fù)制的話,請使用vector(16章第三節(jié))或者valarray(22章第四節(jié))。
字符數(shù)組可以方便地采用字符串直接初始化(參考第五章2.2小節(jié))
譯注:就是這樣啦charalpha[]=”abcdefghijklmn”;

*/

下面來看一個例子:


#include
<
iostream.h
>



int
array1[
5
]
=

{
1,2,3}
;

static

int
array2[
5
]
=

{
1}
;



void
main()


{

intarr1[5]=…{
2};
staticintarr2[5]=…{
1,2};

intn;
cout<<“global: “;
for(n=0;n<5;n++)
cout<<““<<array1[n];

cout<<“ globalstatic: “;
for(n=0;n<5;n++)
cout<<““<<array2[n];

cout<<“ local: “;
for(n=0;n<5;n++)
cout<<““<<arr1[n];

cout<<“ localstatic: “;
for(n=0;n<5;n++)
cout<<““<<arr2[n];
cout<<endl;
}


在這個例子中,全局和靜態(tài)數(shù)組都按語言規(guī)范要求被初始化為0,但是局部數(shù)組并沒有向前面所說的為不確定值,下面是用gcc,VC6.0,tuborC++分別編譯的結(jié)果(注意gcc用g++編譯c++文件,gcc不會鏈接庫的):



/**/
/*
GCC可同時用來編譯C程序和C++程序。一般來說,C編譯器通過源文件的后綴名來判斷是C程序還是C++程序。在Linux中,C源文件的后綴名為.c,而C++源文件的后綴名為.C或.cpp。
但是,gcc命令只能編譯C++源文件,而不能自動和C++程序使用的庫連接。因此,通常使用g++命令來完成C++程序的編譯和連接,該程序會自動調(diào)用gcc實現(xiàn)編譯。
*/

GCC:


VC6.0:


TurboC++


這說明了對局部數(shù)組沒有初始化的元素的值,這幾種編譯器都將其設(shè)置為0.但是,如果如果不對數(shù)組進(jìn)行初始化,即在定義的同時沒有用列表初始化,那么局部數(shù)組的值就取決于編譯器而對程序員來說就是不可預(yù)料的了.有時間可以測試一下各個編譯器,不過在vc中是0xcc.所以對局部數(shù)組的初始化要特別小心.但是全局的數(shù)組和靜態(tài)數(shù)組還是會被正確的賦于0值的.

最后要重申下對變量初始化的重要性,http://blog.vckbase.com/smileonce/archive/2005/06/18/6777.html 這里列舉了沒有初始化造成的事故.

此外,這個blog地址值得收藏,在http://blog.vckbase.com/排行榜的blog都值得仔細(xì)看.

在VC的安裝盤的/VC98/CRT下可以看到vc自帶的C/C++庫的源代碼.

總結(jié)

以上是生活随笔為你收集整理的C语言的数组初始化「建议收藏」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。