register:
register變數可能不存放在記憶體中,所以不能用&來獲取它的位址
static:
1.靜態全域性變數:作用於僅限於變數被定義的檔案中,其他檔案用extern也沒法使用它
2.靜態區域性變數:函式執行結束,靜態變數值也不會銷毀,下次進入函式仍能用到原來的值
3.靜態函式:函式的作用於僅侷限於本檔案
基本資料型別:short、int、long、char、float、double
1.不同型別資料相加時,由低精度向高精度轉化
2.signed與unsigned進行運算時把signed轉化成unsigned來運算
3.為了增加程式的可讀性,不要混用char和unsigned char,前者定義字元型別,後者定義數值型別
signed char:
int main()
printf("%d", strlen(a));
return 0;
}strlen(a)的長度不是1000而是255。-1二進位制為11111111(1位元組),不斷減1直到-128,即10000000,
再減1為127,即01111111,繼續減1直到0,所以第a[255] = 0,而strlen函式計算長度時,
計算的是到'\0'之前的長度,所以a[256]及以後的被截斷,無法計入長度。
變數的命名規則:
1.不能以數字開頭
2.函式名禁止被用於其他地方
3.巨集定義,列舉常數,唯讀變數,盡量用大寫字母命名
4.變數賦值時,禁止用0開頭,因為會被計算機認為是八進位制格式的數
float變數與0進行比較:
float ftestval = 0.0;
if((ftestval >= -epsinon) && (ftestval <= epsinon));//epsinon為定義好的精度
bool變數:
1.boo1變數與零值比較:
(1)if(btestflag == 0) if(btestflag == 1)
會讓人誤會成整型變數,所以這種寫法不好
(2)if(btestflag == true) if(btestflag == flase)
flase在編譯器裡的值是0,但是有些編譯器吧true的值定義為-1,所以偶爾會出錯
(3)if(btestflag) if(!btestflag)
比較好的寫法
2.如果bool值表示式需要賦值操作,那麼賦值操作必須在運算元之外分別進行,以避免「=」和「==」的混淆
x = y;
if(x != 0)
不要寫成:if((x = y) != 0)
switch:
1.case的結尾不要忘記加break!不要忘記加break!不要忘記加break!
2.即使程式不需要default,也該保留default:break;的語句
3.盡量把出現頻率高的情況放前面,低的放後面
迴圈語句:
1.break是跳出一層迴圈,continue是結束當前迴圈的當前輪次,進入下一輪次
2.多層迴圈巢狀時,把長的迴圈放內層,以減少cpu跨切迴圈層的次數。
3.盡量使用半開半閉區間寫法,即n < 10而非n <= 9
4.不要在for迴圈體內修改迴圈變數,防止迴圈失控
5.for語句的控制表示式不能包含任何浮點型別的物件,因為捨入誤差和擷取誤差會通過迴圈的迭代傳播(以訛傳訛)
const:
1.定義const唯讀變數,具有不可變性。
2.const修飾的唯讀變數必須在定義時初始化
volatile:
用它修飾的變數表示可以被某些編譯器未知的因素更改,遇到這個關鍵字宣告的變數,編譯器對訪問改變了的**不再進行優化,從而提供對特殊位址的穩定訪問
extern:
變數宣告,表明變數或函式的定義在別的檔案中
struct與class:
1.struct成員預設是public。而class的成員預設是private
2.c語言中struct中無法放函式,c++可以
union:
用法類似於struct,所有資料成員具有相同的起始位址,可用來測試大端小端
enum:
第乙個開始往後,從0依次+1,可對其中列舉常量進行賦值,後一位是前一位+1
typedef:
typedef並不是定義新的資料型別,而是為已存在的資料型別進行重新命名
c語言深度解剖筆記1
2016.8.14 dage 複習內容 c語言深度解剖筆記1 有三大類 算術運算子 關係運算子與邏輯運算子,還有位運算子等,相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此 i 應解釋為 i 基本表示式 1級 最高 字尾表示式 2極 單目 一元運算 3級 強制型別表示式 4級...
C語言深度解剖(1)
關鍵字 其中一部分 還有一些在老師講的課件裡面 register 宣告暫存器變數 const 宣告唯讀變數 volatile 說明變數在程式執行中可被隱含的改變 extern 宣告變數是在其他檔案中宣告 也可以看作是引用變數 goto 無條件跳轉語句 register register變數必須是乙個...
c語言深度解剖筆記
關鍵字 register 這個關鍵字請求編譯器盡可能的將變數存在 cpu內部暫存器中而不是通過記憶體定址訪問以提高效率。注意是盡可能,不是絕對。你想想,乙個 cpu的暫存器也就那麼幾個或幾十個,你要是定義了很多很多 register 變數,它累死也可能不能全部把這些變數放入暫存器吧,輪也可能輪不到你...