《C語(yǔ)言3—標(biāo)識(shí)符,關(guān)鍵字,數(shù)據(jù)類(lèi)型》

2019年3月7日星期四 陰轉(zhuǎn)多云
今天天氣依舊挺好的哇,有陽(yáng)光。(我想問(wèn)一下多云和晴的界限到底是啥?我感覺(jué)是晴天氣預(yù)報(bào)說(shuō)多云。)
早上出門(mén)的時(shí)候很冷。
昨天晚上心情有點(diǎn)down,所以沒(méi)學(xué)多少C語(yǔ)言,今天繼續(xù)學(xué)習(xí)啊。
(聲明,理論知識(shí)部分全部來(lái)自菜鳥(niǎo)教程?。?/code>
今日學(xué)習(xí)內(nèi)容:(上接C語(yǔ)言基礎(chǔ)知識(shí)學(xué)習(xí)2)

(3)標(biāo)識(shí)符

C 標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)變量、函數(shù),或任何其他用戶(hù)自定義項(xiàng)目的名稱(chēng)。
一個(gè)標(biāo)識(shí)符以字母 A-Z 或 a-z 或下劃線(xiàn) _ 開(kāi)始,后跟零個(gè)或多個(gè)字母、下劃線(xiàn)和數(shù)字(0-9)。
C 標(biāo)識(shí)符內(nèi)不允許出現(xiàn)標(biāo)點(diǎn)字符,比如 @、$ 和 %。C 是區(qū)分大小寫(xiě)的編程語(yǔ)言。

9、關(guān)鍵字

下表列出了 C 中的保留字。這些保留字不能作為常量名、變量名或其他標(biāo)識(shí)符名稱(chēng)。

關(guān)鍵字 說(shuō)明
auto 聲明自動(dòng)變量
break 跳出當(dāng)前循環(huán)
case 開(kāi)關(guān)語(yǔ)句分支
char 聲明字符型變量或函數(shù)返回值類(lèi)型
const 聲明只讀變量
continue 結(jié)束當(dāng)前循環(huán),開(kāi)始下一輪循環(huán)
default 開(kāi)關(guān)語(yǔ)句中的"其它"分支
do 循環(huán)語(yǔ)句的循環(huán)體
double 聲明雙精度浮點(diǎn)型變量或函數(shù)返回值類(lèi)型
else 條件語(yǔ)句否定分支(與 if 連用)
enum 聲明枚舉類(lèi)型
extern 聲明變量或函數(shù)是在其它文件或本文件的其他位置定義
float 聲明浮點(diǎn)型變量或函數(shù)返回值類(lèi)型
for 一種循環(huán)語(yǔ)句
goto 無(wú)條件跳轉(zhuǎn)語(yǔ)句
if 條件語(yǔ)句
int 聲明整型變量或函數(shù)
long 聲明長(zhǎng)整型變量或函數(shù)返回值類(lèi)型
register 聲明寄存器變量
return 子程序返回語(yǔ)句(可以帶參數(shù),也可不帶參數(shù))
short 聲明短整型變量或函數(shù)
signed 聲明有符號(hào)類(lèi)型變量或函數(shù)
sizeof 計(jì)算數(shù)據(jù)類(lèi)型或變量長(zhǎng)度(即所占字節(jié)數(shù))
static 聲明靜態(tài)變量
struct 聲明結(jié)構(gòu)體類(lèi)型
switch 用于開(kāi)關(guān)語(yǔ)句
typedef 用以給數(shù)據(jù)類(lèi)型取別名
unsigned 聲明無(wú)符號(hào)類(lèi)型變量或函數(shù)
union 聲明共用體類(lèi)型
void 聲明函數(shù)無(wú)返回值或無(wú)參數(shù),聲明無(wú)類(lèi)型指針
volatile 說(shuō)明變量在程序執(zhí)行中可被隱含地改變
while 循環(huán)語(yǔ)句的循環(huán)條件
C99新增關(guān)鍵字
C11新增關(guān)鍵字

10、C 中的空格

只包含空格的行,被稱(chēng)為空白行,可能帶有注釋?zhuān)珻 編譯器會(huì)完全忽略它。
在 C 中,空格用于描述空白符、制表符、換行符和注釋。
空格分隔語(yǔ)句的各個(gè)部分,讓編譯器能識(shí)別語(yǔ)句中的某個(gè)元素(比如 int)在哪里結(jié)束,下一個(gè)元素在哪里開(kāi)始。
(簡(jiǎn)單來(lái)說(shuō)就是關(guān)鍵字與其他的代碼要有空格來(lái)讓編譯器識(shí)別出來(lái),不然關(guān)鍵字可能不能起到該有的作用。)

11、C 數(shù)據(jù)類(lèi)型

在 C 語(yǔ)言中,數(shù)據(jù)類(lèi)型指的是用于聲明不同類(lèi)型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)。變量的類(lèi)型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式。

序號(hào) 類(lèi)型與描述
1 基本類(lèi)型:它們是算術(shù)類(lèi)型,包括兩種類(lèi)型:整數(shù)類(lèi)型和浮點(diǎn)類(lèi)型。
2 枚舉類(lèi)型:它們也是算術(shù)類(lèi)型,被用來(lái)定義在程序中只能賦予其一定的離散整數(shù)值的變量。
3 void 類(lèi)型:類(lèi)型說(shuō)明符 void 表明沒(méi)有可用的值。
4 派生類(lèi)型:它們包括:指針類(lèi)型、數(shù)組類(lèi)型、結(jié)構(gòu)類(lèi)型、共用體類(lèi)型和函數(shù)類(lèi)型。

數(shù)組類(lèi)型和結(jié)構(gòu)類(lèi)型統(tǒng)稱(chēng)為聚合類(lèi)型。函數(shù)的類(lèi)型指的是函數(shù)返回值的類(lèi)型。

(1)整數(shù)類(lèi)型

下表列出了關(guān)于標(biāo)準(zhǔn)整數(shù)類(lèi)型的存儲(chǔ)大小和值范圍的細(xì)節(jié):


注意,各種類(lèi)型的存儲(chǔ)大小與系統(tǒng)位數(shù)有關(guān),但目前通用的以64位系統(tǒng)為主。
以下列出了32位系統(tǒng)與64位系統(tǒng)的存儲(chǔ)大小的差別(windows 相同):


為了得到某個(gè)類(lèi)型或某個(gè)變量在特定平臺(tái)上的準(zhǔn)確大小,您可以使用 sizeof 運(yùn)算符。表達(dá)式 sizeof(type) 得到對(duì)象或類(lèi)型的存儲(chǔ)字節(jié)大小。下面的實(shí)例演示了獲取 int 類(lèi)型的大?。?p>

#include <stdio.h>
#include <limits.h>
 
int main()
{
   printf("int 存儲(chǔ)大小 : %lu \n", sizeof(int));
   
   return 0;
}

%lu 為 32 位無(wú)符號(hào)整數(shù),詳細(xì)說(shuō)明查看 C 庫(kù)函數(shù) - printf()。

當(dāng)您在 Linux 上編譯并執(zhí)行上面的程序時(shí),它會(huì)產(chǎn)生下列結(jié)果:

int 存儲(chǔ)大小 : 4

(2)浮點(diǎn)類(lèi)型

下表列出了關(guān)于標(biāo)準(zhǔn)浮點(diǎn)類(lèi)型的存儲(chǔ)大小、值范圍和精度的細(xì)節(jié):

類(lèi)型 存儲(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)類(lèi)型占用的存儲(chǔ)空間以及它的范圍值:
實(shí)例:

#include <stdio.h>
#include <float.h>
 
int main()
{
   printf("float 存儲(chǔ)最大字節(jié)數(shù) : %d \n", sizeof(float));
   printf("float 最小值: %E\n", FLT_MIN );
   printf("float 最大值: %E\n", FLT_MAX );
   printf("精度值: %d\n", FLT_DIG );
   
   return 0;
}

%E 為以指數(shù)形式輸出單、雙精度實(shí)數(shù),詳細(xì)說(shuō)明查看 C 庫(kù)函數(shù) - printf()。
當(dāng)您在 Linux 上編譯并執(zhí)行上面的程序時(shí),它會(huì)產(chǎn)生下列結(jié)果:

float 存儲(chǔ)最大字節(jié)數(shù) : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6

(補(bǔ)充:FLT_MIN、FLT_MAX、FLT_EPSILON是C++中的定義:

/* min positive value */ 
#define FLT_MIN 1.175494351e-38F 

/* max value */ 
#define FLT_MAX 3.402823466e+38F 

/* smallest such that 1.0+FLT_EPSILON != 1.0 */ 
#define FLT_EPSILON 1.192092896e-07F 

就是定義了FLOAT所能表示的最大值,最小值,以及最小的正數(shù)。)

(3)void類(lèi)型

void 類(lèi)型指定沒(méi)有可用的值。它通常用于以下三種情況下:

序號(hào) 類(lèi)型與描述
1 函數(shù)返回為空:C 中有各種函數(shù)都不返回值,或者您可以說(shuō)它們返回空。不返回值的函數(shù)的返回類(lèi)型為空。例如 void exit (int status);
2 函數(shù)參數(shù)為空:C 中有各種函數(shù)不接受任何參數(shù)。不帶參數(shù)的函數(shù)可以接受一個(gè) void。例如 int rand(void);
3 指針指向 void:類(lèi)型為 void * 的指針代表對(duì)象的地址,而不是類(lèi)型。例如,內(nèi)存分配函數(shù) void *malloc( size_t size ); 返回指向 void 的指針,可以轉(zhuǎn)換為任何數(shù)據(jù)類(lèi)型。

(這里想提一個(gè)疑問(wèn)啊,就是Markdown里面如何實(shí)現(xiàn)一個(gè)表格框內(nèi)換行呢?就像下面截圖這樣。)

摘錄別人的筆記:

常用基本數(shù)據(jù)類(lèi)型占用空間(64位機(jī)器為例):
char : 1個(gè)字節(jié)
int :4個(gè)字節(jié)
float:4個(gè)字節(jié)
double:8個(gè)字節(jié)
基本類(lèi)型書(shū)寫(xiě):
整數(shù):
a,默認(rèn)為10進(jìn)制 ,10 ,20。
b,以0開(kāi)頭為8進(jìn)制,045,021。
c.,以0b開(kāi)頭為2進(jìn)制,0b11101101。
d,以0x開(kāi)頭為16進(jìn)制,0x21458adf。
小數(shù):
單精度常量:2.3f 。
雙精度常量:2.3,默認(rèn)為雙精度。
字符型常量:用英文單引號(hào)括起來(lái),只保存一個(gè)字符'a'、'b' 、'*' ,還有轉(zhuǎn)義字符 '\n' 、'\t'。
字符串常量:用英文的雙引號(hào)引起來(lái) 可以保存多個(gè)字符:"abc"。

11、C 變量

變量其實(shí)只不過(guò)是程序可操作的存儲(chǔ)區(qū)的名稱(chēng)。C 中每個(gè)變量都有特定的類(lèi)型,類(lèi)型決定了變量存儲(chǔ)的大小和布局,該范圍內(nèi)的值都可以存儲(chǔ)在內(nèi)存中,運(yùn)算符可應(yīng)用于變量上。
變量的名稱(chēng)可以由字母、數(shù)字和下劃線(xiàn)字符組成。它必須以字母或下劃線(xiàn)開(kāi)頭。大寫(xiě)字母和小寫(xiě)字母是不同的,因?yàn)?C 是大小寫(xiě)敏感的。
有以下幾種基本的變量類(lèi)型:


C 語(yǔ)言也允許定義各種其他類(lèi)型的變量,比如枚舉、指針、數(shù)組、結(jié)構(gòu)、共用體等等。

(1)C 中的變量定義

變量定義就是告訴編譯器在何處創(chuàng)建變量的存儲(chǔ),以及如何創(chuàng)建變量的存儲(chǔ)。變量定義指定一個(gè)數(shù)據(jù)類(lèi)型,并包含了該類(lèi)型的一個(gè)或多個(gè)變量的列表,如下所示:

type variable_list;

在這里,type 必須是一個(gè)有效的 C 數(shù)據(jù)類(lèi)型,可以是 char、w_char、int、float、double 或任何用戶(hù)自定義的對(duì)象,variable_list 可以由一個(gè)或多個(gè)標(biāo)識(shí)符名稱(chēng)組成,多個(gè)標(biāo)識(shí)符之間用逗號(hào)分隔。
變量可以在聲明的時(shí)候被初始化(指定一個(gè)初始值)。初始化器由一個(gè)等號(hào),后跟一個(gè)常量表達(dá)式組成。
下面列舉幾個(gè)實(shí)例:

extern int d = 3, f = 5;    // d 和 f 的聲明與初始化
int d = 3, f = 5;           // 定義并初始化 d 和 f
byte z = 22;                // 定義并初始化 z
char x = 'x';               // 變量 x 的值為 'x'

不帶初始化的定義:帶有靜態(tài)存儲(chǔ)持續(xù)時(shí)間的變量會(huì)被隱式初始化為 NULL(所有字節(jié)的值都是 0),其他所有變量的初始值是未定義的。


最后說(shuō)幾句昨天留下來(lái)的提問(wèn)吧。
今天和同學(xué)們?nèi)フ覅抢蠋熼_(kāi)會(huì)之后她和我們嘮嗑,我才知道原來(lái)她是工作了八年才考研到大學(xué)里面,然后繼續(xù)讀博,最后當(dāng)大學(xué)老師到現(xiàn)在。在這過(guò)程中她自己一直在不斷學(xué)習(xí),之間還學(xué)了個(gè)啥電子做衣服,嗯我不知道做啥的,但是很厲害的樣子。她告訴我們,不管是在工作還是讀研,不管怎么樣都要一直學(xué)習(xí),她就算當(dāng)老師也是一直每天都要抽時(shí)間來(lái)自己學(xué)習(xí),也說(shuō)在學(xué)習(xí)上留下了很多疑問(wèn)和難題,希望能夠把這些疑問(wèn)和難題解決掉,不留遺憾。
聽(tīng)完這些感覺(jué)很是敬佩啊,以前大家都說(shuō)她教書(shū)有些晦澀之類(lèi)的,我想和她工作了八年相當(dāng)于比別人晚八年有關(guān)吧,所以可能有點(diǎn)欠缺。但是不是每個(gè)人工作八年后都有勇氣去考研,也不是每個(gè)人都能夠考上,她現(xiàn)在也是很厲害的啊。
不管怎么樣,努力都是必要的?。?/p>


2019年3月7日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容