c基礎部分備忘
*強制型別轉換得到所需型別的中間變數,原變數型別不變:
*++ -- 不能用於常量(因為常量值不可變)和表示式,屬於單目運算子,結合方向自右向左
*在呼叫函式時,對於實參的求值順序,ansi並無規定,因編譯器而異
*關係運算子的結合方向:自右向左。關係表示式的值只能是真或假
*優先順序: ! > && > ||, ?:表示式去較高的型別
*位運算運算物件只能是整型或字元型資料,不能是實型資料
*break不能用於除迴圈語句和switch語句之外的任何語句
*變數儲存型別:auto,register,static,extern
*形參屬於區域性變數
*extern關鍵字每個引用的函式都要加,extern用以說明程式級的變數
*變數的作用域:程式級,檔案級,函式級,語句塊級
*auto,register是動態變數,static是靜態變數
*static變數所在的函式被呼叫結束後,也不釋放儲存單元,作用域外不可見
*區域性靜態變數值具有可繼承性(如迴圈中變數的值為上次迴圈改變後的值)
*外部變數(extern)只能存放在記憶體的靜態儲存區,在整個程式的執行期間一直占用記憶體單 元
*register型變數個數受限,且不能為long,double,float型
*區域性static具有全域性壽命和區域性可見性
*extern不是變數定義,可擴充套件外部變數的作用域
*外部函式是可被程式中的其它檔案所呼叫的函式
*內部函式只能被本檔案中其它函式呼叫,用static宣告
*函式呼叫中的陣列:實參用陣列名,形參用陣列定義,陣列元素做函式引數屬於值傳遞,陣列名作函式引數是位址傳遞
*goto語句不能用整數做標號, 只能出現在goto坐在函式內,且唯一,只能加在可執行語句前
*巨集定義可以巢狀,不可以遞迴,如:#define max max+10 錯誤
#define width 80
#define length width+40
var = length*2;
巨集展開:var = 80 + 40*2;結果並非預期那樣,因為#define句沒有括號,巨集定義中最好 加入括號
可以用巨集名代替字串,當巨集定義在一行中寫不下,需要在下一行繼續時,只需在最後乙個字元後加乙個「/」(注:第二行開始不要有空格,否則空格會被一起替換掉)
*巨集名有效範圍為定義命令之後到本原始檔結束,除非用#undef命令終止巨集名的作用域。
*巨集定義中,雙引號「」闊氣的字串內的子串和使用者標識中的成分不替換
*#define s (r) pi*r*r相當於s代表「(r) pi*r*r」
#define power(x) x*x
x = 4;y = 6;
z = power(x + y);巨集展開:z = x + y * x + y;
#define power(x) ((x) * (x))巨集展開:z = ((x + y)*(x+y))
*include指令中「」引起的表示現在當前目錄搜尋,在搜尋標準目錄,目錄可指定路徑,<>引起的直接按便準目錄搜尋
*條件編譯:#ifdef 識別符號
程式段1
#else
程式段2
#endif
若指定的識別符號已經被#define定義過,則只編譯程式段1,否則編譯程式段2
#ifndef 識別符號
程式段1
#else
程式段2
#endif
如果指定的識別符號沒被#define定義過,則編譯程式段1,否則編譯程式段2
#if 表示式
程式段1
#else
程式段2
#endif
若指定的表示式為真,則編譯程式段1,否則編譯程式段2
*int i= 15;
int data[i];
這種寫法是錯誤的,不能用變數定義陣列維數
*陣列不初始化,其元素值為隨機數,對static陣列元素不賦初值,系統會自動賦以0值
*int a[5] =
等價於:a[0] = 1; a[1] = 3; a[2] = 4; a[3] = 0; a[4] = 0;
*當全部陣列元素賦初值時,可不指定陣列長度
*char str = "hello",儲存為:h e l l o /0
char str = ,儲存為:h e l l o
*int array[-100];錯誤
float i = 3;
a[i] = 10;錯誤
*char ch[5] = ;儲存為:b o y /0 /0
*main()
用字元陣列名時,不要加&,以空格或回車結束
%s遇到/0結束,空格或者回車結束後,系統自動補/0
*puts函式輸出完換行
*gets從鍵盤輸入乙個以回車結束的字串放入字元陣列中,並自動加'/0'
*strcat,strcpy返回字元陣列第乙個引數的首位址
*不能賦值語句為乙個字元陣列賦值,如:char str1[20],str2[20]; str1 = 錯誤
str2 = str1;錯誤
*strcmp(字串1,字串2)若1 < 2,返回負整數,若1>2,返回正整數,若1=2,返回0,字串比較不能用==
*strlen返回字串實際長度,不包括'/0',如:
char s[10] = ;
則 strlen(s) = 1
char s = "/t/v///0will/n"
strlen(s) = 3
char s = "/x69/082/n"
strlen(s) = 1
*用無名結構體直接定義變數只能用一次
*結構體型別不分配記憶體,不能賦值,訪問或者運算;結構體變數則是分配記憶體,可以賦值,訪問,以及運算
*結構體可以巢狀
*結構體變數不能整體引用,只能引用變數成員,可將乙個結構體變數賦值給另乙個同型別結構體變數
*共用體變數任何時刻只有乙個成員存在
*共用體變數中起作用的是最後一次存放的成員
*不能再定義共用體變數時初始化,可用乙個union為另個賦值
*typedef用自定義名字為已有資料型別命令,typedef tpye name
typedef int integer
*typedef定義型別,不能定義變數,沒有創造出新資料型別。
c 學習知識點滴記錄 一
這些知識都是從別人關於c 知識的講解而自己手敲的,照著大佬們的敲一遍,加深自己的理解。map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map 現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提...
SQL點滴學習記錄(一)
alter table table name add column column name1 varchar 100 default null comment 注釋 add column column name2 varchar 100 default null comment 注釋 1 最近用的比...
Golang點滴記錄
a的位址是 a 符號的意思是對指標取值,如 a,就是a變數所在位址的值,當然也就是a的值了 和 可以互相抵消,同時注意,可以抵消掉,但 是不可以抵消的 首先先明白一點 無緩衝 堵塞,緩衝 非堵塞 比如 c1 make chan int 無緩衝 c2 make chan int,1 有緩衝 c1 1 ...