【C语言】第二章 类型、运算符和表达式
為什么80%的碼農都做不了架構師?>>> ??
變量和常量是程序處理的兩種基本數據對象。
聲明語句說明變量的名字及類型,也可以指定變量的初值。
運算符指定要進行的操作。
表達式則把變量與常量組合起來生成新的值。
對象的類型決定該對象可取值的集合以及可以對該對象執行的操作。
2.1變量名
命名規則:
(1)由字母和數字組成的序列,第一個字符必須是字母,下劃線被看作是字母,通常用于命名較長的變量名,以提高可讀性。
(2)由于庫例程的名字通常以下劃線開頭,因此變量名不要以下劃線開頭。
(3)大寫字母與小寫字母是有區別的。
(4)C語言中,變量名使用小寫字母,符號常量名全部使用大寫字母。
(5)局部變量一般使用較短的變量名(尤其是循環控制變量),外部變量使用較長的名字。
2.2 數據類型及長度
(1)
C語言提供了下列幾種基本數據類型:
char 字符型,占用一個字節,可以存放本地字符集中的一個字符
int 整型,通常反映了所用機器中整數的最自然長度
float 單精度浮點型
double 雙精度浮點型
此外,這些基本數據類型前可以加上short 與long兩個限定符。
eg:
short int sh
long int counter
(這種,int可以省略)
(2)
short與long的引入可以為我們提供滿足實際需要的不同長度的整型數。
int通常代表特定機器中整數的自然長度。
short類型通常為16位,
long類型通常為32位。
int 類型可以為16位或者32位。
各編譯器可以根據硬件特性自主選擇合適的類型長度,但是要遵循:
short與int類型至少為16位,
long類型至少為32為。
并且short類型不得長于int類型,而int類型不得長于long類型。
signed與unsigned ?用于限定char類型或任何整型。unsigned無符號,總是正值或0,并遵守算術模2n(n次方)定律,其中n是該類型占用的位數。如果char對象占用8位,那么unsiged char類型變量取值范圍為0-255,而siged char類型取值范圍則為-128-127。
2.3 常量
(1)
類似于1234 ,屬于int類型的常量;
類似于123456789L,以字母L或l結尾,屬于long類型的常量;
如果一個整數太大以至于無法用int類型表示時,也被當作long類型處理;
無符號常量以字母u或U結尾;
后綴ul或UL表明是unsigned long類型;
(2)
浮點數常量中包含一個小數點或一個指數,也可以兩者都有。
沒有后綴的浮點數常量為double類型;
后綴有f或F表示float類型;
后綴l或L則表示long double類型;
(3)
整型數除了用十進制表示外,還可以用八進制或十六進制。
帶前綴0的整型常量表示為八進制;
帶前綴0x或0X的整型常量表示為十六進制;
八進制或者十六進制也可以使用L表示long類型,使用U表示unsigned類型,eg:0XFUL
(4)
一個字符常量是一個整數,如‘x’。
字符在機器字符集中的數值就是字符常量的值。
字符常量一般用來與其他字符進行比較,但也可以像其他整數一樣參與數值運算。
某些字符可以通過轉義字符序列表示為字符和字符串常量。
轉義字符序列看起來像兩個字符,但只表示一個字符。
另外,我們可以用‘\ooo’ 表示任意的字節大小的為模式。其中000代表1-3個八進制數字。
這種位模式還可以用‘\xhh’表示。
其中,hh是一個或多個十六進制數字。
ANSI C語言中的全部轉義字符序列如下:
\a:響鈴符?
\b:回退符 ? ??
\f:換頁符 ? ?
\n:換行符 ? ? ?
\r:回車符 ? ??
\t:橫向制表符
\v:縱向制表符 ??
\\:反斜杠 ? ?
\?:問號 ? ? ??
\':單引號 ? ? ?
\":雙引號 ? ?
\ooo:八進制數 ??
\xhh:十六進制數
另,字符常量'\0' 表示值為0的字符,也就是空字符串(null)。
我們通常用‘\0’的形式代替0,以強調某些表達式的字符屬性,但其數字值為0。
(5)
常量表達式是僅僅只包含常量的表達式。
這種表達式在編譯時求值,而不是在運行時求值。
eg:
#define MAXLINE 1000
char line[MAXLINE+1]
(6)
字符串常量也叫字符串字面值,是用雙引號括起來的0個或多個字符組成的字符序列。
例如“I am a string” 或“”都是字符串。
雙引號不是字符串的一部分,只是用于限定字符串。
字符常量中使用的轉義字符序列同樣也可以用在字符串中。
編譯時,可以將多個字符串常量連接起來,例如,下列形式:
“hello,”“ world” 等價于 “hello, world”
字符串常量的連接為將較長的字符串分散在若干個源文件中提供了支持。
========
從技術角度看,字符串常量就是數組常量。字符串的內部表示使用一個空字符'\0'作為串的結尾,
因此,存儲字符串的物理存儲單元數比括在雙引號中的字符數多一個。
這種表示也說明,C語言對字符串的長度沒有限制,但程序必須掃描完整個字符串才能確定字符串的長度。
標準庫函數strlen(s)可以返回字符串參數s的長度,但長度不包括末尾的'\0'。
========
我們應該搞清楚字符常量和僅包含一個字符的字符串的區別。
'x'與'X'是不同的。
前者是一個整數,其值是字母x在機器字符集中對應的數值;
后者是一個包含一個字符以及一個結束符'\0'的字符數組。
(7)
枚舉常量是另外一種類型的常量。枚舉是一個常量整型值的列表。
例如:
enum boolean { NO, YES };
在沒有顯式說明的情況下,enum類型中第一個枚舉名的值是0,第二個是1,一次類推。
如果只指定了部分枚舉名的值,那么未指定值的枚舉名的值將依著最后一個指定值向后遞增。
2.4 聲明
所有變量必須先聲明后使用,盡管某些變量可以通過上下文隱式聲明。
一個聲明指定一種變量類型,后面所帶的變量表可以包含一個或多個該類型的變量。
eg:
int lower,upper,step;
char c, line[1000];
一個聲明語句中的多個變量可以拆開在多個聲明語句中聲明。因此,也可以
int lower;
int upper;
int step;
char c;
char line[1000];
按照這種形式書寫代碼需要占用較多的空間,但便于向各聲明語句中添加注釋,也便于以后修改。
還可以在聲明的同時對變量進行初始化。
在聲明中,如果變量名的后面緊跟一個等號以及一個表達式,該表達式就充當對變量進行初始化的初始化表達式。
任何變量的聲明都可以使用const限定符指定,該限定符指定的變量的值不能被修改。
對數組而言,const指定數組所有元素的值都不能被修改。
2.5 算術運算符
二元算術運算符包括:+ - * / %
整數除法會截斷結果中的小數部分。
取模運算符%不能應用于float或double類型。
在有負操作數的情況下,整數除法截取的方向以及取模運算結果的符號取決于具體機器的實現。
【優先級】二元運算符+和-相同優先級 ?《 二元運算符 * / % 《 一元運算符+ - ;
算術運算符采用從左到右的結合規則。
2.6 關系運算符和邏輯運算符
(1)關系運算符包括:>、 >= 、< 、<=、
它們具有相同的優先級,優先級僅次于他們的是相等性運算符 ?== !=
關系運算符的優先級比算術運算符底。
(2)
邏輯運算符&& 與|| 。由&&與||連接的表達式按從左到右的順序進行求值,并且,在知道結果為真或假后立即停止計算。
運算符&&的優先級比||的優先級高,但兩者都比關系運算符和相等運算符的優先級底。
因此,表達式i<lim - 1 && (c = getchar()) != '\n' && c != EOF 就不需要加圓括號了。
但是,由于運算符!= 的優先級高于賦值運算符的優先級,因此,在表達式(c = getchar()) != '\n' 中,就需要使用圓括號。
【總結:賦值運算符《 邏輯運算符 《 相等于運算符 《 關系運算符 《 算術運算符】
2.7類型轉換
啊啊
轉載于:https://my.oschina.net/cqlcql/blog/535915
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【C语言】第二章 类型、运算符和表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity, undo
- 下一篇: atitit.atiOrmStoreSe