1 定義宣告最重要的區別是 :定義建立了物件並且為其分配了記憶體。 宣告沒有分配記憶體。
2 reigster
最快的關鍵字 請求編譯器盡可能的將變數存放在cpu的暫存器中,以提高效率,是盡可能 ,不是絕對。
3 static
修飾變數 :靜態全域性變數作用域僅限於變數被定義的檔案中,(定義的開始出到檔案的結束 或者是使用之前再加上extern *)
靜態區域性變數,定義在函式體內,只是應用於這個函式體內。即使函式執行結束,靜態變數的值還是不會被銷毀,函式下次使用時仍然能用到這個值。
例如:
#include
static
int j;
int fun1(void)
int fun2(void)
int main()
printf("i = %d, j = %d\n",reti,retj);
return
0; }
請問 i?j?
i = 10, j = 1
4 變數的命名的規則
1)命名直觀,可望文生義,不允許使用拼音
2)命名的長度應當符合「min-length&&max-information」原則
3)單詞由多個單詞組成時候,每個單詞的字母應該大寫,
4)盡量避免名字中出現數字編號,除非邏輯上需要編號
5)乙個函式名禁止被用於其他處
6)定義變數的時候千萬不要忘記初始化,定義變數時編譯器不一定清空了這塊記憶體,他的值可能是無效的值。
7)不同型別的資料之間的運算要注意精度的擴充套件問題,一般是低精度向高精度擴充套件。
5 最冤枉的關鍵字–sizeof
sizeof() 不是函式是
int i;
sizeof(int)and sizeof(i)and sizeof i 值等於4
但是 sizeof int 就不行
總結 :sizeof 在計算「」變-量「」的時候可以省略括號
但是在計算型別的時候是不能省略括號的;
sizeof(int)*p 表示什麼意思?
(在32位系統中指標占用4個位元組 在64位系統中占用8位)
int *p = null;
int a[100];
sizeof(p) 8
sizeof(*p) 4
//只是求第乙個值的占用記憶體大小
sizeof(a) 400
sizeof(a[100]) 4
//只是在求第100 位的大小
6 bool
最好的格式是 if(test) || if (!test)
7 int *p = null
最好的判斷是 : if(null==p) ||if (null !=p )
8 switch
case :後面只能是整形或是字元常量或是常量表示式(想想字元型別在記憶體中是怎麼存的)
9 迴圈語句
for 迴圈巢狀的時候盡可能的將 短的迴圈放在最外層 將長的放在內迴圈(減少cpu 跨切迴圈層的次數 提高效率)
10 void的空指標
void *pvoid
pvoid ++ ansi錯誤 但是在gnu正確
pvoid+=1 ansi錯誤 但是在gnu正確
解釋:不能對void 指標進行演算法操作 都是不合法的 (進行演算法操作必須知道資料的型別的大小)
11對記憶體的操作
memset :接收一切型別的指標
memset(陣列名,設成的值,位元組長度)
memcpy(目的位址,源位址,位元組長度)
12 const
const int max=100
int array[max];
解釋;在c語言中會有報錯,(我們知道在定義陣列的時候要確定陣列的長度),所以在c語言中還是唯讀屬性,仍然是變數。
但是在c++中就不會報錯,c++編譯器做了擴充。(從彙編的角度看的話就是,const只是給出了對應的記憶體位址)
指標修飾:
const int *p //p可變,p指向的物件不可變
int const *p //p可變 ,p指向的物件不可變
int * const p //p不可變,物件可變
const int *const p //p不可變,物件也不可變
記憶方法:思想是近水樓台先得月 將型別去掉 修飾誰誰就是不能改變
13 最易變得關鍵字 —volatile
主要是告訴編譯器要不要去優化**
int i=10;
int j = i;
int k = i;
解釋過程:在記憶體中首先將i的值賦值給j,但是並沒有將其丟掉,在將j賦值給k ,提高了效率
volatile int i=10;
int j = i;
int k = i ;
解釋過程;volatile關鍵字就是告訴編譯器i的值隨時會發生改變,每次用它的時候都要從記憶體中取出來。(記憶體不能偷懶)
const volatile int i= 10;實際上此宣告表示的申明了乙個const int型的變數,所以i是唯讀變數,不能被修改。同時i又被volatile修飾了,意思就是說不允許編譯器優化**,在**中每次用到i時都要直接從記憶體中去取數。
所以,雖然const volatile int i = 10;定義沒錯,但是這樣的定義沒有什麼實際的意義。
14 struct關鍵字
struct student
stu;
sizeof(stu) = 1 結構體型別不管什麼樣子 其占有記憶體最小是1byte
15 注釋的奧妙
當c語言處理注釋的時候是 將注釋的部分用空格來替換,並不是全部刪除
16 #號預算符
#也是預處理:#define p(x) printf(「this is 「#x」 \n」,x);
p(8);
結果: this is 8
##號
#define xname(n) x##n
xname(8)
結果:x8
C語言簡單筆記
因為疫情原因,原本線下進行的c語言程式設計只能改為線上學習,學習效果不是很好,因此趁暑假的機會回顧一下c語言的主要知識。今天覆習的主要內容 資料型別,常量與變數。一 資料型別 c語言中,資料對使用者的呈現方式分為常量和變數,並且常量和變數都有不同的型別。具有相同性質的資料的集合可以看成一種資料型別。...
深度學習簡單筆記
各方法在訓練中對應的作用簡單解釋 微積分 求導 梯度下降法 求最優解 最小二乘法 尋找資料的最佳函式匹配 樸素葉貝斯 回歸 分類 極大似然估計 將概率最大化的引數作為真實估計值使用。似然函式 對數似然 取對數可以將連乘轉為連加且不影響單調性,但其實可能更重要的一點是概率的連乘將會變成乙個很小的值,可...
《C語言深度剖析》筆記
c語言深度剖析 筆記 1.在c語言中,凡不加返回值型別限定的函式,就會被編譯器作為返 回整形處理。2.register 變數必須是乙個單個的值,並且其長度應小於或等於整型 的長度。而且 register 變數可能不存放在記憶體中,所以不能用取 址運算子 來獲取 register變數的位址。3.int...