C 程序結(jié)構(gòu)
C Hello World 實(shí)例
C 程序主要包括以下部分:
- 預(yù)處理器指令
- 函數(shù)
- 變量
- 語句 & 表達(dá)式
- 注釋
讓我們看一段簡單的代碼波丰,可以輸出單詞 "Hello World":
#include <stdio.h>
int main()
{
/* this is my first c program*/
printf("Hello, World! \n");
return 0;
}
接下來我們講解一下上面這段程序:
- 程序的第一行 #include <stdio.h> 是預(yù)處理器指令亮元,告訴 C 編譯器在實(shí)際編譯之前要包含 stdio.h 文件。
- 下一行 int main() 是主函數(shù),程序從這里開始執(zhí)行砾嫉。
- 下一行
/*...*/
將會(huì)被編譯器忽略匀哄,這里放置程序的注釋內(nèi)容倔喂。它們被稱為程序的注釋。 - 下一行 printf(...) 是 C 中另一個(gè)可用的函數(shù)糖荒,會(huì)在屏幕上顯示消息 "Hello, World!"杉辙。
- 下一行 return 0; 終止 main() 函數(shù),并返回值 0捶朵。
C 基本語法
我們已經(jīng)看過 C 程序的基本結(jié)構(gòu)蜘矢,這將有助于我們理解 C 語言的其他基本的構(gòu)建塊。
C 的關(guān)鍵字
下表列出了 C 中的保留字综看。這些保留字不能作為常量名品腹、變量名或其他標(biāo)識符名稱。
關(guān)鍵字 | 說明 |
---|---|
auto | 聲明自動(dòng)變量 |
break | 跳出當(dāng)前循環(huán) |
case | 開關(guān)語句分支 |
char | 聲明字符型變量或函數(shù)返回值類型 |
const | 聲明只讀變量 |
continue | 結(jié)束當(dāng)前循環(huán)红碑,開始下一輪循環(huán) |
default | 開關(guān)語句中的"其它"分支 |
do | 循環(huán)語句的循環(huán)體 |
double | 聲明雙精度浮點(diǎn)型變量或函數(shù)返回值類型 |
else | 條件語句否定分支(與 if 連用) |
enum | 聲明枚舉類型 |
extern | 聲明變量或函數(shù)是在其它文件或本文件的其他位置定義 |
float | 聲明浮點(diǎn)型變量或函數(shù)返回值類型 |
for | 一種循環(huán)語句 |
goto | 無條件跳轉(zhuǎn)語句 |
if | 條件語句 |
int | 聲明整型變量或函數(shù) |
long | 聲明長整型變量或函數(shù)返回值類型 |
register | 聲明寄存器變量 |
return | 子程序返回語句(可以帶參數(shù)舞吭,也可不帶參數(shù)) |
short | 聲明短整型變量或函數(shù) |
signed | 聲明有符號類型變量或函數(shù) |
sizeof | 計(jì)算數(shù)據(jù)類型或變量長度(即所占字節(jié)數(shù)) |
static | 聲明靜態(tài)變量 |
struct | 聲明結(jié)構(gòu)體類型 |
switch | 用于開關(guān)語句 |
typedef | 用以給數(shù)據(jù)類型取別名 |
unsigned | 聲明無符號類型變量或函數(shù) |
union | 聲明共用體類型 |
void | 聲明函數(shù)無返回值或無參數(shù),聲明無類型指針 |
volatile | 說明變量在程序執(zhí)行中可被隱含地改變 |
while | 循環(huán)語句的循環(huán)條件 |
C99 新增關(guān)鍵字
_Bool |
_Complex |
_Imaginary |
inline |
restrict |
---|---|---|---|---|
C11 新增關(guān)鍵字
_Alignas |
_Alignof |
_Atomic |
_Generic |
_Noreturn |
---|---|---|---|---|
_Static_assert |
_Thread_local |
C 數(shù)據(jù)類型
在 C 語言中析珊,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)羡鸥。變量的類型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式忠寻。
C 中的類型可分為以下幾種:
序號 | 類型與描述 |
---|---|
1 | 基本類型: 它們是算術(shù)類型惧浴,包括兩種類型:整數(shù)類型和浮點(diǎn)類型。 |
2 | 枚舉類型: 它們也是算術(shù)類型锡溯,被用來定義在程序中只能賦予其一定的離散整數(shù)值的變量赶舆。 |
3 | void 類型: 類型說明符 void 表明沒有可用的值。 |
4 | 派生類型: 它們包括:指針類型祭饭、數(shù)組類型芜茵、結(jié)構(gòu)類型、共用體類型和函數(shù)類型倡蝙。 |
數(shù)組類型和結(jié)構(gòu)類型統(tǒng)稱為聚合類型九串。函數(shù)的類型指的是函數(shù)返回值的類型。在本章節(jié)接下來的部分我們將介紹基本類型寺鸥,其他幾種類型會(huì)在后邊幾個(gè)章節(jié)中進(jìn)行講解猪钮。
整數(shù)類型
下表列出了關(guān)于標(biāo)準(zhǔn)整數(shù)類型的存儲(chǔ)大小和值范圍的細(xì)節(jié):
下表列出了關(guān)于標(biāo)準(zhǔn)整數(shù)類型的存儲(chǔ)大小和值范圍的細(xì)節(jié):
類型 | 存儲(chǔ)大小 32 /64 | 值范圍 |
---|---|---|
char | 1 字節(jié) | -128 到 127 或 0 到 255 |
unsigned char | 1 字節(jié) | 0 到 255 |
signed char | 1 字節(jié) | -128 到 127 |
int | 2 或 4 字節(jié) | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字節(jié) | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字節(jié) | -32,768 到 32,767 |
unsigned short | 2 字節(jié) | 0 到 65,535 |
long | 4 字節(jié) | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字節(jié) | 0 到 4,294,967,295 |
注意,各種類型的存儲(chǔ)大小與系統(tǒng)位數(shù)有關(guān)胆建,但目前通用的以64位系統(tǒng)為主烤低。
以下列出了32位系統(tǒng)與64位系統(tǒng)的存儲(chǔ)大小的差別(windows 相同):
下表列出了關(guān)于標(biāo)準(zhǔn)浮點(diǎn)類型的存儲(chǔ)大小、值范圍和精度的細(xì)節(jié):
類型 | 存儲(chǔ)大小 | 值范圍 | 精度 |
---|---|---|---|
float | 4 字節(jié) | 1.2E-38 到 3.4E+38 | 6 位小數(shù) |
double | 8 字節(jié) | 2.3E-308 到 1.7E+308 | 15 位小數(shù) |
long double | 16 字節(jié) | 3.4E-4932 到 1.1E+4932 | 19 位小數(shù) |
頭文件 float.h 定義了宏笆载,在程序中可以使用這些值和其他有關(guān)實(shí)數(shù)二進(jìn)制表示的細(xì)節(jié)扑馁。下面的實(shí)例將輸出浮點(diǎn)類型占用的存儲(chǔ)空間以及它的范圍值:
#include <stdio.h>
#include <float.h>
int main()
{
printf("long size is : %lu \n", sizeof(long double));
printf("float 存儲(chǔ)最大字節(jié)數(shù) : %lu \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0;
}
long size is : 16
float 存儲(chǔ)最大字節(jié)數(shù) : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
Process finished with exit code 0
void 類型
void 類型指定沒有可用的值涯呻。它通常用于以下三種情況下:
序號 | 類型與描述 |
---|---|
1 | 函數(shù)返回為空 C 中有各種函數(shù)都不返回值,或者您可以說它們返回空腻要。不返回值的函數(shù)的返回類型為空复罐。例如 void exit (int status); |
2 | 函數(shù)參數(shù)為空 C 中有各種函數(shù)不接受任何參數(shù)。不帶參數(shù)的函數(shù)可以接受一個(gè) void雄家。例如 int rand(void); |
3 | 指針指向 void 類型為 void * 的指針代表對象的地址效诅,而不是類型。例如趟济,內(nèi)存分配函數(shù) void *malloc( size_t size ); 返回指向 void 的指針乱投,可以轉(zhuǎn)換為任何數(shù)據(jù)類型。 |
如果現(xiàn)在您還是無法完全理解 void 類型咙好,不用太擔(dān)心篡腌,在后續(xù)的章節(jié)中我們將會(huì)詳細(xì)講解這些概念。
常用基本數(shù)據(jù)類型占用空間(64位機(jī)器為例)
- char : 1個(gè)字節(jié)
- int :4個(gè)字節(jié)
- float:4個(gè)字節(jié)
- double:8個(gè)字節(jié)
基本類型書寫
整數(shù)
- a勾效,默認(rèn)為10進(jìn)制 嘹悼,10 ,20层宫。
- b杨伙,以0開頭為8進(jìn)制,045萌腿,021限匣。
- c.,以0b開頭為2進(jìn)制毁菱,0b11101101米死。
- d,以0x開頭為16進(jìn)制贮庞,0x21458adf峦筒。
小數(shù)
單精度常量:2.3f 。
雙精度常量:2.3窗慎,默認(rèn)為雙精度物喷。
字符型常量
用英文單引號括起來,只保存一個(gè)字符'a'遮斥、'b' 峦失、'*' ,還有轉(zhuǎn)義字符 '\n' 术吗、'\t'尉辑。
字符串常量
用英文的雙引號引起來 可以保存多個(gè)字符:"abc"。
1较屿、數(shù)據(jù)類型轉(zhuǎn)換:C 語言中如果一個(gè)表達(dá)式中含有不同類型的常量和變量隧魄,在計(jì)算時(shí)实幕,會(huì)將它們自動(dòng)轉(zhuǎn)換為同一種類型;在 C 語言中也可以對數(shù)據(jù)類型進(jìn)行強(qiáng)制轉(zhuǎn)換堤器;
2、自動(dòng)轉(zhuǎn)換規(guī)則:
- a)浮點(diǎn)數(shù)賦給整型末贾,該浮點(diǎn)數(shù)小數(shù)被舍去闸溃;
- b)整數(shù)賦給浮點(diǎn)型,數(shù)值不變拱撵,但是被存儲(chǔ)到相應(yīng)的浮點(diǎn)型變量中辉川;
3、強(qiáng)制類型轉(zhuǎn)換形式: (類型說明符)(表達(dá)式)