1、整形和浮點型的存儲方式不同,怎麼存儲就怎麼取出來 ,char int short long存儲方式一樣 只是表示地範圍大小不同 ,float和double是一樣的只是方式有點不同,表示的精度不同。
不要用%f取出整形,也不要%d取出浮點型
char int short long分有符號和無符號 而浮點型 只有有符號沒有無符號
2、void類型的函數和形參
在函數的返回類型和形參中使用void的意思是 調用該函數時不需要給它傳遞形參 返回值是void表示該函數不需要返回一個有意義的返回值,所以調用者也不要想着 去調用該返回值
void *的時候:void類型的指針 表示該指針一個void類型的數,void類型的數 既可以是char 也可以是float int等 只是我們目前不知道
3、類型轉換
不同類型的變量是不能直接運算的 也就是說int和float類型不能直接加減運算
int a=3;float b=2.5 printf("%f\n",a+b); 輸出是對的 5.5 是編譯器自己進行轉換了 (隱式轉換)
逐步分析:1、編譯器發現a+b中兩個變量類型不同,於是編譯器會將兩個變量進行隱式轉換 轉換成類型相同的 (會將a轉換成float型,因爲隱式類型轉換默認朝精度更高得範圍更大的方向轉換) a在a+b這個運算中 a成了3.0 (但是在後面a還是3,其實並不是真的將a轉換成了float類型,而是構造了一個臨時變量將a轉成了float類型的值)
a, b同上 int c=a+b; printf("%d\n",c); 輸出是5
逐步分析:編譯器發現a,b類型不同,分析同上 得到5.5 但是賦值的時候發現5.5是float類型,c是int 型 因此會強制將5.5轉換成int型 結果是5
4、c語言中原生沒有bool類型 c++有
所以在C語言中bool不是關鍵字 C語言中如果需要bool類型 則就用 int 代替 (雖然有一點浪費啦,int 32bits )
#define TRUE 1
#define FALSE 0
在BOOL世界裏 只有0是假,其他全部是真
switch(整形,字符或者表達式反正不能是浮點型)
可以用touch新建文件
5、局部變量和全局變量對比:
(1)局部變量你沒有初始化的話值是隨機的 全局變量的話整形是0
(2)全局變量分配在數據段上,局部變量分配在棧上
6、內存有四區:數據取,代碼區,堆區、棧區
所謂數據段:存儲的是數,像全局變量,靜態變量就是存儲在數據段,數據段是在程序運行前就準備好的,程序運行後就銷燬的
代碼段:存儲的是程序代碼,一般是隻讀的
棧 stack(先進後出):臨時存放數據的區域
堆(動態):new出來的對象和malloc向內存申請的內存 就存放在堆中
6、register變量 register int a;
reigister是C語言的一個關鍵字 寄存器型變量 和普通的變量是一樣的 ,特點是 該類型的變量被引用的速度是最快的的 (C語言承諾會在運行時將該類型變量儘量的放到寄存器中,不在內存中,速度就快了,普通的變量是放在內存中的)
7、全局變量的定義和初始化在MAIN函數運行之前發生的
8、在一個程序中,不管是同一個文件還是不同的文件,不能出現名字相同的函數。。一旦重複編譯器就會報錯。
因爲編譯器調用函數時是根據函數名來調用函數的,一旦重複,編譯器就不知道調用的是哪一個了。
9、調用別的c文件的全局變量,只要在該c文件extern 一下該變量即可 (extern可置於變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量或函數時,在其它模塊中尋找其定義)
extern的時候不能給變量賦初值