C點滴記錄(一)

2021-05-24 00:53:46 字數 3161 閱讀 3847

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 ...