資料型態(C語言) - 維基百科,自由的百科全書

文章推薦指數: 80 %
投票人數:10人

signed short, 2bytes, -32768至32767 ; long int, 4bytes 或 8bytes · -2147483648至2147483647 或 -9223372036854775808至9223372036854775807 ; unsigned long, 4bytes 或 資料型態(C語言) 維基百科,自由的百科全書 跳至導覽 跳至搜尋 C標準函式庫 一般 資料型態 字元類型 字串 數學 檔案輸入/輸出 日期/時間 在地化 記憶體分配 過程控制 訊號 替代標記 雜項 閱論編 在C語言中,資料型態可以分為兩類:基礎資料型態和複合資料型態。

目次 1基礎數據類型 2複合數據類型 2.1結構 2.2聯合 2.3枚舉 3參考文獻 基礎資料型態[編輯] 注意:以下是典型的資料位長和範圍。

編譯器可能使用不同的資料位長和範圍。

請參考具體的參考。

在標準標頭檔limits.h和float.h中說明了基礎資料的長度。

float,double和longdouble的範圍就是在IEEE754標準中提及的典型資料。

另外,C99添加了新的複數類型,C11添加了原子類型,它們不在本條目討論範圍內。

關於這些類型的具體含義和部分細節,參見資料類型,最後一列寫出了這些類型在硬體層面的類型(x86&x86_64實現) 關鍵字 位元組(位元組) 範圍 格式化字串 硬體層面的類型 備註 char 1bytes 通常為-128至127或0至255,與體系結構相關 %c 位元組(Byte) 大多數情況下即signedchar; 在極少數1byte !=8bit或不使用ASCII字元集的機器類型上範圍可能會更大或更小。

其它類型同理。

unsignedchar 1bytes 通常為0至255 %c、%hhu 位元組 signedchar 1bytes 通常為-128至127 %c、%hhd、%hhi 位元組 int 2bytes(16位元系統)或4bytes -32768至32767或-2147483648至2147483647 %i、%d 字(Word)或雙字(DoubleWord) 即signedint(但用於bit-field時,int可能被視為signedint,也可能被視為unsignedint) unsignedint 2bytes或4bytes 0至65535或0至4294967295 %u 字或雙字 signedint 2bytes或4bytes -32768至32767或-2147483648至2147483647 %i、%d 字或雙字 shortint 2bytes -32768至32767 %hi、%hd 字 即signedshort unsignedshort 2bytes 0至65535 %hu 字 signedshort 2bytes -32768至32767 %hi、%hd 字 longint 4bytes或8bytes[1] -2147483648至2147483647或-9223372036854775808至9223372036854775807 %li、%ld 長整數(LongInteger) 即signedlong unsignedlong 4bytes或8bytes 0至4294967295或0至18446744073709551615 %lu 整數(UnsignedInteger)或 長整數(UnsignedLongInteger) 依賴於實現 signedlong 4bytes或8bytes -2147483648至2147483647或-9223372036854775808至9223372036854775807 %li、%ld 整數(SignedInteger)或 長整數(SignedLongInteger) 依賴於實現 longlong 8bytes -9223372036854775808至9223372036854775807 %lli、%lld 長整數(LongInteger) unsignedlonglong 8bytes 0至18446744073709551615 %llu 長整數(UnsignedLongInteger) float 4bytes 2.939x10−38至3.403x10+38(7sf) %f、%e、%g 浮點數(Float) double 8bytes 5.563x10−309至1.798x10+308(15sf) %lf、%e、%g 雙精度浮點型(DoubleFloat) longdouble 10bytes或16bytes 7.065x10-9865至1.415x109864(18sf或33sf) %lf、%le、%lg 雙精度浮點型(DoubleFloat) 在大多數平台上的實現與double相同,實現由編譯器定義。

_Bool 1byte 0或1 %i、%d 布林型(Boolean) 註:粗體為C99所新增的類型。

複合資料型態[編輯] 在C語言中,複合資料型態可分為三類:結構、聯合和列舉。

在現代C語言中,聯合和列舉的使用頻率已逐漸減少。

結構[編輯] 主條目:結構體(C語言) 結構(structurevariable)允許構造由多個基礎資料型態組合而成的複雜結構[2]。

結構為物件導向程式設計的藍本。

以下範例通過結構和結構體裡的指標實現了二元樹結構: typedefstructBintree{ intdata; structbintree*lchild;//leftchildofthenode structbintree*rchild;//rightchildofthenode }bintree;//自定义bintree类型 為結構定義變數時通常會用到動態記憶體分配: #definemktree()(bintree*)malloc(sizeof(bintree))//分配该结构所需的内存单元数量 bintree*tree; tree=mktree();//分配到tree指针 tree->data=1; tree->lchild=mktree(); ... 由於C語言不具備自動垃圾收集(GarbageCollection)功能,使用完畢後呼叫free(treePtr)來釋放之前通過malloc(size)分配的記憶體。

詳見這裡。

在C99標準中,還添加了名為伸縮型陣列成員的特性[3],關於此特性的內容超出了該條目的介紹範圍,若需了解更多資訊可參見文件或其它材料。

聯合[編輯] 主條目:聯合體 聯合(union)與結構相類似,但不同的是,聯合在某一特定時刻只有最後被使用的成員的值是確定的,因此一個聯合只使用所有成員中所占空間最大的成員所使用的記憶體。

然而,一些編譯器可以通過編譯參數或#pragma的方式強制聯合使用與所有成員所占儲存空間的和相等的儲存空間,在這種情況下,除最後被使用的成員外,其餘成員的值是未定義的[2]。

以下給出了聯合的一個聲明: unionfoo{ intbar; doublefoobar; }; foo.bar=8; foo.foobar=3.14; 在這個例子中,假設使用32位元平台編譯,一個double變數占8位元組,一個int變數占2位元組(由上表得),則該聯合所占大小即為double類型的大小——8位元組。

在這段程式執行完畢後,foo.bar的值是未定義的,而foo.foobar的值為3.14。

列舉[編輯] 列舉(enumeratedtype)用來聲明一組整數常數。

預設情況下,列舉聲明格式為enumtype{value1,value2,...,valuen};此時value1,value2分別為0,1,直到n-1。

事實上,列舉類型在C語言實現中是以int類型儲存的[2]。

以下是列舉的一個聲明: enuma{b,c,d}; 在此之後,便可以以如下方式使用: enumafoo; foo=b; if(foo!=c)//等同于if(foo !=1) { do_something(); } 而此時的b,c,d分別為0,1,2。

另外,也可以手動為列舉列表中的常數賦值。

下面是一個例子: enumcolour{red=100,blue=700,yellow=200}; 則此時red,blue,yellow的值分別為100,700,200. 需要注意的是,列舉在C和C++中所表現的行為有一些細微的差異。

參見C與C++的相容性。

參考文獻[編輯] ^GCC、Clang等實現中,64位元代碼的long類型為64位元,而MSVC中則維持32位元 ^2.02.12.2ISO/IEC9899:2018(PDF).[2020-06-10].(原始內容存檔(PDF)於2020-07-22).  ^ISO/IEC9899:1999(PDF).[2020-06-15].(原始內容存檔(PDF)於2018-01-11).  閱論編C語言 《C程式設計語言》(K&RC) 歷史 ANSIC C99 C11 C18 嵌入式C語言 MISRAC 特性 Functions 標頭檔 字串 Syntax Preprocessor 資料型態 指標 函式庫 glibc C標準程式庫 CPOSIXlibrary Dietlibc uClibc Newlib EGLIBC Bionic klibc musl 編譯器 Clang GCC MicrosoftMSC編譯器 IntelC++編譯器 BorlandTurboC LCC PellesC PCC TCC C++/CLI C++/CX WatcomC/C++compiler C與其他的程式語言 C與C++ 相容性 運算子 Pascal與C的比較(英語:ComparisonofPascalandC) CtoJavabyte-codecompiler 衍生的程式語言 C++ C♯ Objective-C D語言 Alef(英語:Alef(programminglanguage)) Limbo Go Vala C/C++的整合開發環境 分類 閱論編資料型態無解釋的 位元 位元組 三進位位 三進位位元組 Word 數值 整數 符號性 有符號數 無符號數 定點數 浮點數 雙精度 擴充精度(英語:Extendedprecision) 半精度 迷你浮點數(英語:Minifloat) 八倍精度(英語:Octuple-precisionfloating-pointformat) 四倍精度(英語:Quadruple-precisionfloating-pointformat) 單精度 有理數(英語:Rationaldatatype) 複數(英語:Complexdatatype) 任意精度算術 區間(英語:intervalarithmetic) 文字 字元 字串 指標 記憶體位址 實體位址 虛擬位址 參照 組合 代數資料型態(英語:Algebraicdatatype) 廣義(英語:generalizedalgebraicdatatype) 陣列 關聯陣列 類 串列 物件 元物件 可選類型 積類型(英語:Producttype) 記錄 集合 聯合體 標籤 其他 布林型 底層類別(英語:Bottomtype) 容器 列舉類型 異常 一等函式 不透明資料型態(英語:Opaquedatatype) 遞迴資料型態 訊號標 字串流 頂類型(英語:Toptype) 類型類 型別系統 單位類型(英語:Unittype) Void 不定型別 相關議題 抽象資料型別 資料結構 介面 種類(英語:Kind(typetheory)) 元類 物件類型(英語:Objecttype(object-orientedprogramming)) 原始型別 協定 子類型 C++模板 型別構造器 參數多型 取自「https://zh.wikipedia.org/w/index.php?title=数据类型_(C语言)&oldid=69852460」 分類:​C語言C標準函式庫數據類型 導覽選單 個人工具 沒有登入討論貢獻建立帳號登入 命名空間 條目討論 臺灣正體 不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體 查看 閱讀編輯檢視歷史 更多 搜尋 導航 首頁分類索引特色內容新聞動態近期變更隨機條目資助維基百科 說明 說明維基社群方針與指引互助客棧知識問答字詞轉換IRC即時聊天聯絡我們關於維基百科 工具 連結至此的頁面相關變更上傳檔案特殊頁面靜態連結頁面資訊引用此頁面維基數據項目 列印/匯出 下載為PDF可列印版 其他語言 العربيةDeutschEnglishFrançais한국어РусскийУкраїнськаTiếngViệt 編輯連結



請為這篇文章評分?