天天看點

2021.08.04自學C語言(打卡第5天)

①常見關鍵字:auto:比如int a,其實這種局部變量是自動生成,自動銷毀的。是以完整應該是:auto signed int a=10;這種,auto 表達自動的意思,省略不寫。

②break:常用在終止循環語句

③register:寄存器。首先得知道計算機存儲資料有如下幾個形式:硬碟→記憶體→高速緩存→寄存器。從左至右通路速度越來越快,但是能給出的空間是越來越小。如硬碟常見有500G,記憶體有8G/16G,高速緩存器幾十兆,寄存器更小。其次就是要知道CPU(中央處理器),工作時,它是在記憶體裡通路資料,前期的計算機記憶體通路速度和CPU計算速度相當,速度可以比對。但是計算機發展至今,CPU計算速度越來越快,導緻記憶體的通路速度已經跟不上了,是以出現了通路速度越來越快的存儲形式,如今都是在寄存器中去拿資料,資料不夠再層層遞減往下拿資料。使用:

2021.08.04自學C語言(打卡第5天)

被register修飾的變量,通路速度會更快,但是出現多個register修飾的變量,則由編譯器自行決定先通路誰,後通路誰。

④:typedef:類型定義,或者類型重定義。使用:

2021.08.04自學C語言(打卡第5天)

就是把unsigned int這種複複雜雜的類型換個自定義的關鍵字去使用,友善一點。typedef的其他用法還有,暫時沒有講。

⑤:static去修飾局部變量、全局變量、函數。

static修飾局部變量。看代碼1:

2021.08.04自學C語言(打卡第5天)

看代碼2:

2021.08.04自學C語言(打卡第5天)

可以看出static修飾局部變量時:改變或者說延長了局部變量的生命周期,static修飾的那一行代碼,運作程式時已經不再執行它。

當static修飾全局變量時:首先在同一源檔案夾内建立兩個不同源檔案,在第一個源檔案定一個變量,然後在另一個源檔案去調用它:extern.是可以的,因為全局變量的作用域是整個項目,在不同源檔案并不影響互相之間調用。但是在第一個源檔案的那個全局變量最前面加上static進行修飾,其他源檔案想再調用該“全局變量”已經不行了。或者說:static修飾全局變量時,改變的是全局變量的作用域。

當static修飾函數時:與static修飾全局變量類似,修飾完的函數隻在目前源檔案内可被調用,或者說,函數不再具備外部連接配接性。注意跨檔案調用函數的格式:

extern int sum(int,int);第一個int是函數傳回值類型,sum是函數名,括号内是兩個參數的類型。

⑥:#define定義常量與宏:#define定義的辨別符常量之前有講過了:#define max 10,之後的代碼中max就是10,而且是全局變量的角色。

宏:隻不過#define定義的東西了多了參數,使用:求兩個數的較大者:

2021.08.04自學C語言(打卡第5天)

⑦指針!!

首先得知道如何産生位址:常見電腦都有32位/64位,32/64指的是有32/64根位址線或資料線,每根線都可傳導正負電,正電可以用1表示,負電用0表示,那拿32位電腦說明:32位,每個位置僅有兩種可能,那排列組合就有2^32次方個可能,從小到大 換算成十進制數就有0到2^32-1個數,每個數去用作記憶體單元的名字(位址,比如哈爾濱工業大學二校區5較高價的電梯大廈這種),如果此時的記憶體單元,每個單元是一個比特位(bit),那換算成GB:2^32÷8÷1024÷1024÷1024=0.5GB,就是說這麼多資料線同時工作時,一次才能通路0.5G記憶體,顯然與實際的記憶體4G/8G/16G這種不相稱,那記憶體單元改成位元組,那此時就是0.5*8=4GB,挺符合了。實操:

2021.08.04自學C語言(打卡第5天)

int* 從記憶體申請存儲位址的一個空間,該空間名叫p,把a的位址存進去,&為取位址符号。還有char* ch='w';的用法,申請一個存儲字元位址的空間。

*p為解引用操作符,白話:解開p所在位址中的元素,*p=20,p空間内的元素隻有a,并被指派20;

可以看出存儲位址的空間大小為4個位元組,當電腦是64位時,指針大小為8個位元組。