1.邏輯運算子的短路效應
/*
邏輯運算子的短路效應
對於邏輯與(&&)來說,同為真時才為真,所以當條件1為假時不需要計算條件2
對於邏輯或(||)來說,同為假時才為假,所以當條件1為真時不需要計算條件2
下面的運算形式為,先計算(++a && ++b)的結果,
++a為真,故再計算++b,結果也為真,所以表示式(++a && ++b)為真
對於((++a && ++b) || ++c),已經有一項為真,所以不計算++c
*/int main()
printf("%d,%d,%d\n",a,b,c);
return 0;
}
2.關係表示式的值
/*
關係表示式的值
關係運算子的結合律是從右往左,先計算(10>5),結果為真,在c語言中即為1
用結果與後面的比較(1>3)結果為假,在c語言中為0,輸出小於號
*/int main()
else
}
3.函式壓棧
/*
函式壓棧順序
函式壓棧,是從右往左壓棧,且壓棧時就要確定實參的值
所以,先看第二個引數,壓棧時i是0,所以壓arr[0]
然後壓第乙個引數,i經過自增此時是1,所以壓arr[1]
*/int main()
; int i = 0;
printf("%d,%d\n", arr[i++], arr[i++]);
}
4.陣列與指標的區別
/*
陣列與指標的區別
1.大小不同
2.指標可以++,陣列名不可以
3.訪問方式不同
陣列名何時表示陣列
1.在定義陣列的同乙個函式中求sizeof(arr)
2.在定義陣列的同乙個函式中取位址+1,&arr+1
3.在函式呼叫中傳遞陣列,陣列會退化成指標
*/void fun(int arr[10])//退化成指標
int main()
; int *p = arr;
printf("%d,%d,%d\n",sizeof(arr),&arr,&arr+1);
printf("%d,%d\n",arr[2],p[2]);
printf("%d,%d\n",*(arr+3),*(p+3));
fun(arr);
return 0;
}
5.資料溢位及預設型別轉換
/*
資料溢位及預設型別轉換
整數預設為int,小數預設是double
當給執行char a = 197時,先計算197,因為是正數,所以它的原碼就是它的補碼
計算機中197的補碼 0000 0000 0000 0000 0000 0000 1100 0101,
因為a是char型別所以只需要乙個位元組的二進位製碼,所以只擷取後乙個位元組1100 0101
而因為計算機中按二進位製碼儲存所以a認為1100 0101是它的補碼
計算機中a的補碼 1100 0101
因為符號位是1,所以是負數,通過取反+1計算原碼,
故a的原碼為 1011 1011 通過計算可得-59,
此處需要手算,因為電腦的計算其是給予的任何二進位製碼它都認為是補碼
*/int main()
C語言複習 1
程式是人機互動的媒介,有輸出必然也有輸入。在c語言中,有多個函式可以從鍵盤獲得使用者輸入 scanf 和 printf 類似,scanf 可以輸入多種型別的資料。getchar getche getch 這三個函式都用於輸入單個字元。gets 獲取一行資料,並作為字串處理。scanf 是最靈活 最複...
C語言基礎複習1
不改變其他位的值的狀況下,對某幾個位進行設值。這個場景微控制器開發中經常使用,方法就是先對需要設定的位用 操作符進行清零操作,然 後用 操作符設值。比如我要改變 gpioa odr 的狀態,可以先對暫存器的值進行 清零操作 gpioa odr 0xff0f 將第 4 7 位清 0 然後再與需要設定的...
C語言基礎複習 結構體 1
c語言允許使用者根據具體問題利用已有的基本資料型別來構造自己所需的資料型別 陣列是由相同型別的資料構成的一種資料型別,適用於對具有相同屬性的資料進行批量處理 結構體是將不同的資料成員組織到統一的名字之下,適用於對關係緊密 邏輯相關 具有相同或者不同屬性的資料進行處理 結構體變數的定義 1.定義結構體...