本文目錄一覽:
C語言筆記——取值範圍
這章主要是留作備用,作為補充知識的吧,不過常用的數據類型的取值範圍還是得做一下了解,並且記住的。
這裡得先明確幾個個概念:
那麼一個字節的大小能表示多大的數呢?
11111111b = FFh = 255
所以我們可以看出,在無符號位的情況下,一個字節就能表示 0 ~ 255 的數。
通常,在有符號情況下,也就是變量類型之前有 signed 這樣的情況下,8 個比特位的第一位為符號位。
關係為:如果符號位是 0 ,那麼這就是一個正數;如果符號位為 1 ,那麼這就是一個負數。
那麼們舉個栗子:
一個 int 型的變量,默認是 signed int 並且是 4 個字節的,那麼就佔有 8 * 4 = 32 個比特位,同時他第一位是符號位,那麼就只有 31 個比特位是表示數值的,表示的大小就是 -2的31次方~2的31次方
這裡引入一個補碼的概念,雖然我並不知道這個有啥用,但是我看教程都講了,那就也寫一下吧。
【C語言筆記】內部全局變量和外部全局變量
1.外部全局變量, 默認情況下所有的全局變量都是外部全局變量
什麼事外部全局變量? 可以被其它文件訪問的全局變量我們稱之為外部全局變量
2.內部全局變量, 只要給全局變量加上static關鍵字就是內部全局變量
什麼是內部全局變量? 只能被當前文件訪問的全局變量我們稱之為內部全局變量
可以定義同名的外部全局變量
多個同名的外部全局變量指向同一塊存儲空間
也可以定義多個同名的內部全局變量
多個同名的全局變量如果不在同一個文件中, 那麼指向不同的存儲空間
為了提高數據的安全性, 不讓別人在其它文件中修改我們的全局變量, C語言提供了另外一個用於修改全局變量的關鍵字, static
只要用static修改的全局變量就是內部全局變量, 只能在當前文件中使用
這樣就可以提高我們全局變量的安全性
如果多個文件中存在同名的內部全局變量, 相互不會影響
如果既有外部全局變量也有內部全局變量, 那麼會優先訪問內部全局變量
用於聲明一個外部全局變量
聲明只需要在使用變量之前聲明就可以了
用於定義一個內部全局變量
聲明和定義的區別:
聲明不會開闢存儲空間
定義會開闢存儲空間
C語言筆記(五)—-struct,enum,typedef等
成員表列由若干個成員組成,每個成員都是該結構的一個組成部分。
對每個成員也必須做類型聲明。
其形式為:
類型聲明符 成員名;
例如:
注意, 最後括號外面的;分號是不可少的 。
結構定義之後,才可以進行變量聲明。
凡聲明為結構 stu 的變量都由上述4個成員組成。
由此可見,結構是一種複雜的數據類型,是數目固定,類型不同的若干有序變量的集合。
聲明結構變量 有以下三種方法。
使用上面定義的stu為例:
如:
也可以用宏定義使一個符號常量來表示一個結構類型。例如:
例如:
這種形式的聲明的一般形式為:
例如:
這種聲明的一般形式為:
第三種方法與第二種方法的區別在於第三種方法中省去了結構名,而直接給出結構變量。
在程序中使用結構變量時,往往不把她作為一個整體來使用。
在ANSI C中除了允許有相同類型的結構變量相互賦值以外,一般對結構變量的使用,包括 賦值、輸入、輸出、運算 等都是通過結構變量的成員來實現的。
表示結構變量成員的一般形式為:
結構變量名.成員名
例如: boy1.num boy2.sex
如果成員本身又是一個結構,則必須逐級找到最低級的成員才能使用。如: boy1.birthday.month
結構變量的賦值就是給各成員賦值。
數組的元素也可以是結構類型的。
因此可以構成結構型數組。
初始化賦值:
當然也可以在定義 stu結構 時同時聲明 pstu。
賦值是把結構變量的首地址賦予該指針變量,不能把結構名賦予該指針變量。
如果 boy 是被聲明為 stu類型 的結構變量。
則:
有了結構指針變量,就能更方便地訪問結構變量的各個成員。
其訪問的一般形式為:
(*結構指針變量).成員名
或
結構指針變量-成員名
例如: (*pstu).num 或 pstu-num
例如:
介紹數組的時候,曾介紹過數組的長度是預先定義好的,在整個程序中固定不變。
C語言中不允許動態數組類型。
例如:
但是又有此需求,為了解決這個問題,C語言提供了一些內存管理函數,這些內存管理函數可以按需要動態地分配內存空間,也可把不再使用的空間回收待用,為有效地利用內存資源提供了手段。
常用的內存管理函數有3個:
例子:分配一塊區域,輸入一個學生數據
上面的例子採用了動態分配的辦法為一個結構分配內存空間。
每一次分配一塊空間可用來存放一個學生的數據,我們可稱之為一個節點。
有多少個學生就應該申請分配多少塊內存空間,也就是說要建立多少個節點。
當然用結構數組也可以完成上述工作,但如果預先不能準確把握學生人數,也就無法確定數組大小。
而且當學生留級、退學之後也不能把該元素佔用的空間從數組中釋放出來。
用動態存儲的方法可以很好地解決這些問題。
有一個學生就分配一個節點,無須預先確定學生的準確人數,某學生退學,可刪去該節點,並釋放該節點佔用的存儲空間,從而節約了寶貴的內存資源。
另一方面,用數組的方法必須佔用一塊連續的內存區域。
而使用動態分配時,每個節點之間可以是不連續的(節點內是連續的)。
節點之間的關係可以用指針實現。
即在節點結構中定義一個成員項來存放下一節點的首地址,這個用於存放地址的成員,常把他稱為指針域。
可在第一個節點的指針域內 存入第二個節點的首地址,在第二個節點的指針域內 又存入第三個節點的首地址,如此串聯下去直到最後一個節點。
最後一個節點因無後續節點連接,其指針域可賦值 0
這種連接方式,在數據結構中稱為“鏈表”。
鏈表的基本操作主要有以下幾種:
例子:建立一個三個節點的鏈表,存放學生數據。為簡單起見,我們假定學生數據結構中只有學號和年齡兩項。可編寫一個建立鏈表的函數create。程序如下:
create函數 用於建立一個有 n個節點 的鏈表,他是一個指針函數,他返回的指針指向 stu結構。
在create函數內定義了三個 stu結構 的指針變量。
head為頭指針,pf為指向兩相鄰節點的前一節點的指針變量。
pb為後一節點的指針變量。
枚舉是一種 基本數據類型 ,而不是一種 構造類型 ,因為他不能再分解為任何基本類型。
enum 枚舉名{ 枚舉值表 };
例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };
enum weeakday a,b,c;
或者為:
enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者為:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
例子:
說明:
只能把枚舉值賦予枚舉變量,不能把元素的數值直接賦予枚舉變量。如:
a=sun;b=mon; 是正確的
a=0;b=1; 是錯誤的。
如果一定要把數值賦予枚舉變量,則必須使用強制類型轉換。
如: a=(enum weekday)2;
還應該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。
例子:
typedef定義的一般形式為:
typedef 原類型名 新類型名
其中原類型名中含有定義部分,新類型名一般用大寫表示,一般用大寫表示,以便於區別。
有時也可用 宏定義 來代替 typedef 功能,但是 宏定義 是由 預處理 完成的,而 typedef 則是 在編譯時 完成的,後者更為靈活方便。
使用 typedef 定義數組、指針、結構等類型將帶來很大的方便,不僅使書寫簡單而且使意義更加明確,因而增強了可讀性。
例如:
又如:
原創文章,作者:NTBX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/139801.html