C 語言是一種通用的高級語言,最初是由丹尼斯·裡奇在貝爾實驗室為開發 UNIX 作業系統而設計的。C 語言最開始是於 1972 年在 DEC PDP-11 計算機上被首次實現。
在 1978 年,布萊恩·柯林漢(Brian Kernighan)和丹尼斯·裡奇(Dennis Ritchie)製作了 C 的第一個公開可用的描述,現在被稱為 K&R 標準。
UNIX 作業系統,C編譯器,和幾乎所有的 UNIX 應用程式都是用 C 語言編寫的。由於各種原因,C 語言現在已經成為一種廣泛使用的專業語言。
易於學習。
結構化語言。
它產生高效率的程序。
它可以處理底層的活動。
它可以在多種計算機平臺上編譯。
關於 CC 語言是為了編寫 UNIX 作業系統而被發明的。
C 語言是以 B 語言為基礎的,B 語言大概是在 1970 年被引進的。
C 語言標準是於 1988 年由美國國家標準協會(ANSI,全稱 American National Standard Institute)制定的。
截至 1973 年,UNIX 作業系統完全使用 C 語言編寫。
目前,C 語言是最廣泛使用的系統程序設計語言。
大多數先進的軟體都是使用 C 語言實現的。
當今最流行的 Linux 作業系統和 RDBMS MySQL 都是使用 C 語言編寫的。
C 程序一個 C 語言程序,可以是 3 行,也可以是數百萬行,它可以寫在一個或多個擴展名為 ".c" 的文本文件中,例如,hello.c。您可以使用 "vi"、"vim" 或任何其他文本編輯器來編寫您的 C 語言程序。
C 程序主要包括以下部分:
程序的第一行 #include <stdio.h> 是預處理器指令,告訴 C 編譯器在實際編譯之前要包含 stdio.h 文件。
下一行 int main() 是主函數,程序從這裡開始執行。
下一行 /*...*/ 將會被編譯器忽略,這裡放置程序的注釋內容。它們被稱為程序的注釋。
下一行 printf(...) 是 C 中另一個可用的函數,會在屏幕上顯示消息 "Hello, W3Cschool!"。
下一行 return 0; 終止 main() 函數,並返回值 0。
C 基本語法我們已經看過 C 程序的基本結構,這將有助於我們理解 C 語言的其他基本的構建塊。
C 的標記(Tokens)C 程序由各種標記組成,標記可以是關鍵字、標識符、常量、字符串值,或者是一個符號。例如,下面的 C 語句包括五個標記:
printf("Hello, W3Cschool! \n");
這五個標記分別是:
printf // 標識符
( // 符號
"Hello, W3Cschool! \n" // 字符串值
) // 符號
; // 分號是語句結束符
分號 ;在 C 程序中,分號是語句結束符。也就是說,每個語句必須以分號結束。它表明一個邏輯實體的結束。
例如,下面是兩個不同的語句:
printf("Hello, W3Cschool! \n");
return 0;
注釋注釋就像是 C 程序中的幫助文本,它們會被編譯器忽略。它們以 /* 開始,以字符 */ 終止,如下所示:
// 單行注釋
/*
多行注釋
多行注釋
多行注釋
*/
注意:不能在注釋內嵌套注釋,注釋也不能出現在字符串
標識符C 標識符是用來標識變量、函數,或任何其他用戶自定義項目的名稱。一個標識符以字母 A-Z 或a-z 或下劃線_ 開始,後跟零個或多個字母、下劃線和數字(0-9)。
C 標識符內不允許出現標點字符,比如 @、$ 和 %。C 是區分大小寫的程式語言。因此,在 C 中,Manpower 和 manpower 是兩個不同的標識符。
關鍵字下表列出了 C 中的保留字。這些保留字不能作為常量名、變量名或其他標識符名稱。
autoelselongswitchbreakenumregistertypedefcaseexternreturnunioncharfloatshortunsignedconstforsignedvoidcontinuegotosizeofvolatiledefaultifstaticwhiledointstruct_Packeddouble
C 中的空格只包含空格的行,被稱為空白行,可能帶有注釋,C 編譯器會完全忽略它。
在 C 中,空格用於描述空白符、制表符、換行符和注釋。空格分隔語句的各個部分,讓編譯器能識別語句中的某個元素(比如 int)在哪裡結束,下一個元素在哪裡開始。因此,在下面的語句中:
int age;
在這裡,int 和 age 之間必須至少有一個空格字符(通常是一個空白符),這樣編譯器才能夠區分它們。另一方面,在下面的語句中:
fruit = apples + oranges; // 獲取水果的總數
fruit 和 =,或者 = 和 apples 之間的空格字符不是必需的,但是為了增強可讀性,您可以根據需要適當增加一些空格。
C 數據類型在 C 語言中,數據類型指的是用於聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲佔用的空間,以及如何解釋存儲的位模式。
C 中的類型可分為以下幾種:
序號類型與描述1基本類型:
它們是算術類型,包括兩種類型:整數類型和浮點類型。2枚舉類型:
它們也是算術類型,被用來定義在程序中只能賦予其一定的離散整數值的變量。3void 類型:
類型說明符 void 表明沒有可用的值。4派生類型:
它們包括:指針類型、數組類型、結構類型、共用體類型和函數類型。數組類型和結構類型統稱為聚合類型。函數的類型指的是函數返回值的類型。在本章節接下來的部分我們將介紹基本類型,其他幾種類型會在後邊幾個章節中進行講解。
整數類型下表列出了關於標準整數類型的存儲大小和值範圍的細節:
類型存儲大小值範圍char1 byte-128 到 127 或 0 到 255unsigned char1 byte0 到 255signed char1 byte-128 到 127int2 或 4 bytes-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 bytes0 到 65,535 或 0 到 4,294,967,295short2 bytes-32,768 到 32,767unsigned short2 bytes0 到 65,535long4 bytes-2,147,483,648 到 2,147,483,647unsigned long4 bytes0 到 4,294,967,295為了得到某個類型或某個變量在特定平臺上的準確大小,您可以使用 sizeof 運算符。表達式 sizeof(type) 得到對象或類型的存儲字節大小。下面的實例演示了獲取 int 類型的大小:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("Storage size for int : %d \n", sizeof(int));
return 0;
}當您在 Linux 上編譯並執行上面的程序時,它會產生下列結果:
Storage size for int : 4
浮點類型下表列出了關於標準浮點類型的存儲大小、值範圍和精度的細節:
類型存儲大小值範圍精度float4 byte1.2E-38 到 3.4E+386 位小數double8 byte2.3E-308 到 1.7E+30815 位小數long double10 byte3.4E-4932 到 1.1E+493219 位小數頭文件 float.h 定義了宏,在程序中可以使用這些值和其他有關實數二進位表示的細節。下面的實例將輸出浮點類型佔用的存儲空間以及它的範圍值:
#include <stdio.h>
#include <float.h>
int main()
{
printf("Storage size for float : %d \n", sizeof(float));
printf("Minimum float positive value: %E\n", FLT_MIN );
printf("Maximum float positive value: %E\n", FLT_MAX );
printf("Precision value: %d\n", FLT_DIG );
return 0;
}當您在 Linux 上編譯並執行上面的程序時,它會產生下列結果:
Storage size for float : 4
Minimum float positive value: 1.175494E-38
Maximum float positive value: 3.402823E+38
Precision value: 6
void 類型void 類型指定沒有可用的值。它通常用於以下三種情況下:
序號類型與描述1函數返回為空
C 中有各種函數都不返回值,或者您可以說它們返回空。不返回值的函數的返回類型為空。例如 void exit (int status);2函數參數為空
C 中有各種函數不接受任何參數。不帶參數的函數可以接受一個 void。例如 int rand(void);3指針指向 void
類型為 void * 的指針代表對象的地址,而不是類型。例如,內存分配函數 void *malloc( size_t size ); 返回指向 void 的指針,可以轉換為任何數據類型。如果現在您還是無法完全理解 void 類型,不用太擔心,在後續的章節中我們將會詳細講解這些概念。