!和~的區別
~:表示按位取反,1變成0,0變成1。
!:表示邏輯取反,false變ture,true變false,在c語言中,邏輯取反的物件只要不是0就表示為真。
//示例:!5
=0~5 (二進位制00000101
,取反11111010)=-6
[~表示按位取反,!表示邏輯否定]
所有的不是0的數用!操作後都是0;
只有當運算元為0xffffffff時,使用!和~的結果值才是一樣的。
* 另外可以注意
* 所有正整數的按位取反是其本身+
1的負數,所有負整數的按位取反是其本身+
1的絕對值
*0的按位取反是-
1
include標頭檔案路徑
#include <>:引用的是編譯器的類的庫路徑的檔案;
#include 「」:引用的是你程式目錄的相對路徑的標頭檔案;
限位符%02x
%mn(x):m表示輸出不足n列則以m字元補充,m一般為0,n表示輸出寬度為n列,(x)表示輸出格式控制符;
%m.nf:代表輸出的浮點數寬度為m位(小數點佔一位),小數點後面保留n位小數,如果輸出的數值不足m位,則前面用空格補足,如果超過,則按超過的實際輸出。
//示例:
%012d: printf
("%012d"
,123);
輸出:000000000123
%12d:printf
("%12d",12
);輸出:12個寬度,12佔兩個寬度,10個寬度為空白:12;
%15.6f:printf
("%15.6f"
,3.12);
輸出: 3.120000
常用的printf函式的格式控制符號:
函式呼叫協議
__stdcall、__cdecl和__fastcall是三種函式呼叫協議,函式呼叫協議會影響函式引數的入棧方式、棧內資料的清除方式、
編譯器函式名的修飾規則等
呼叫協議常用場合:
*__stdcall:windows api預設的函式呼叫協議。
函式引數入棧方式:
棧內資料清除方式:
c語言編譯器函式名稱修飾規則
c++語言編譯器函式名稱修飾規則
a[-1]
a[-1]是有意義的,而且有這樣用的**!
比如我們知道陣列下標是從0開始的,那假如我們想從1開始怎麼辦?
定義乙個指標,指向a[-1]這個位置。。
因為陣列並不檢查下標是否越界;
下標僅表示偏移,-1就表示第乙個元素前面那個元素;
ascii表
const字元
c語言中const關鍵字用來定義常量,如果乙個變數被const修飾,那麼它的值就不能再被改變。與#define定義的預編譯指令相比,他有以下優點:
1、預編譯指令只對值進行簡單的替換,不能進行型別檢查
2、const可以保護被修改的東西,防止意外修改,增強程式的健壯性。
3、編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,使它們在編譯期間成為2乙個常量。沒有使用儲存和讀記憶體的操作,效率增高。
空結構體的大小
空結構體的大小是1個位元組
C語言偏冷知識點彙總
1 c語言函式宣告中引數型別寫在右括號後是什麼意思?如下 所示 int add a,b inta intb 像這樣的宣告是什麼意思,我測試過在gcc和vc 裡都能通過,但就是不明白是什麼意思,有什麼用處?有說明文件?答 古這是古老的寫法,稱為k r風格,與下面的形式一樣 int add int a,...
C語言基礎知識彙總
c語言關鍵字 auto 宣告自動變數 break 跳出當前迴圈 case 開關語句分支 char 宣告字元型變數或函式返回值型別 const 宣告唯讀變數 continue 結束當前迴圈,開始下一輪迴圈 default 開關語句中的 預設 分支 do 迴圈語句的迴圈體 double 宣告雙精度浮點型...
C語言基礎知識要點彙總
最近所在的專案組正在做c的開發,前兩天剛coding完乙個4千來行的程式,4千行的c程式對於經常做c開發的人來說可能不算什麼,但這是我開發過的最長的乙個c程式,做完之後還是小有一點成就感的。大一的時候學了些基礎,之後就沒深入的學習也不怎麼用過c,藉著這次機會想把c複習一下,所以整理了一下可能平時淡忘...