1. 結構struct和共用體union
共用體是一種資料格式,它能夠儲存不同的資料型別,單只能同時儲存其中的一種型別。如結構可以同時儲存int、long和double,共用體只能儲存int、long或double。
2. 使用cin.get(char)
使用cin輸入,將忽略空格和換行符,而傳送給cin的輸入被緩衝,這意味著使用者必須按下回車才可以把輸入的內容傳送給程式。
這裡可以選擇採用cin.get(char)進行補救,最後輸入ctrl+z執行eof結束。
3. 二維陣列和指標陣列
看這樣的兩個陣列:
char* cities1[5] =因為二維陣列的最大長度限制為10個字元,而指標陣列儲存的是字串的位址,從儲存空間角度說,使用指標陣列更為經濟;然後修改的話,二維陣列是更好的選擇。;char cities2[5][10] =
;
4. 字元函式庫cctype
在標頭檔案cctype(老式風格中為ctype.h)
5. const int * 和 int * const 的區別
int sloth = 3;這種宣告格式使得finger只能只想sloth,但允許使用finger來修改sloth的值。中間的宣告不允許使用ps來修改sloth的值,但允許將ps指向另乙個位置。const int * ps = &sloth;
int * const finger = &sloth;
6. 函式指標
直接看例子:
double betsy(int);7.memsetvoid *memset(void *s, int c, size_t n);double pam(int);
void estimate(int lines, double (*pf)(int));
int main()
double betsy(int lns)
double pam(int lns)
void estimate(int lines, double (*pf)(int))
memset:作用是在一段記憶體塊中填充某個給定的值,它對較大的結構體或陣列進行清零操作的一種最快方法。
常見的三種錯誤
第一: 搞反了c 和 n的位置.
一定要記住 如果要把乙個char a[20]清零, 一定是 memset(a, 0, 20)
而不是 memset(a, 20, 0)
第二: 過度使用memset, 我想這些程式設計師可能有某種心理陰影, 他們懼怕未經初始化的記憶體, 所以他們會寫出這樣的**:
char buffer[20];這裡的memset是多餘的. 因為這塊記憶體馬上就被覆蓋了, 清零沒有意義.memset(buffer, 0, sizeof((char)*20));
strcpy(buffer, "123");
第三: 其實這個錯誤嚴格來講不能算用錯memset, 但是它經常在使用memset的場合出現
int some_func(struct something *a)8. 大端格式和小端格式
short int x;① 定義乙個ctime類物件 ctime time;char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低位址單元
x1=((char*)&x)[1]; //高位址單元
② 得到當前時間 time = ctime::getcurrenttime();
③ getyear( ),getmonth( ), getday( ), gethour( ), getminute( ), getsecond( ), getdayofweek( ) 返回整型(int)對應專案
④ 將當前時間格式化 cstring date = time.format("%y-%m-%d %h:%m:%s %w-%a");
說明:1) 結果為:2006-10-13 17:23:47 41-friday
2) 格式符號說明
%a —— 星期(縮寫英文),如fri;
%a —— 星期(全寫英文),如friday
%b —— 月份(縮寫英文),如oct
%b —— 月份(全寫英文),如 october
%c —— 月/日/年 時:分:秒,如 10/13/06 19:17:17
%d —— 日期(1 ~ 31)
%h —— 時(24小時制)(0 ~ 23)
%i —— 時(12小時制)(0 ~ 12)
%j —— 一年當中的第幾天,(1 ~ 366)
%m —— 月份(數字 1 ~ 12)
%m —— 分(0 ~ 59)
%p —— 12小時中的a m/pm指示,或者am,或者pm
%s —— 秒(0 ~ 59)
%u —— 一年中的第幾周,星期日作為每週的第一天(0 ~ 53)
%w —— 星期(數字表示,0 ~ 6,0代表星期日)
%w —— 一年中的第幾周,星期一作為每週的第一天(0 ~ 53)
%x —— 月/日/年,%c的前半段
%x —— 時/分/秒,%c的後半段
%y —— 年份(不帶世紀,如 06)
%y —— 年份(帶世紀,如 2006)
%z,%z —— 時區名稱或縮寫,如果時區未知,此字元為空,如「中國標準時間」
%% —— %
「#」標誌的含義:
① %#a, %#a, %#b, %#b, %#p, %#x, %#z, %#z, %#% ——「#」 被忽略
② %#c —— 把%c中的數字變成英文,再在前面加上星期, 如:「tuesday, march 14, 1995, 12:41:29」.
③ %#x —— 把%x中的數字變成英文,再在前面加上星期,如:tuesday, march 14, 1995
④ %#d, %#h, %#i, %#j, %#m, %#m, %#s, %#u, %#w, %#w, %#y, %#y —— 如果開 頭為0,去掉開頭的0
12. 函式引用返回左值
char &get_val(string &str, string::size_type ix)13. 在c語言中引入組合語言string s("a value");
cout << s << endl;
get_val(s, 0) = 'a';
cout << s << endl;
extern "c" __declspec(dllexport) int add(int a, int b)14. #pragma once是個預處理指令,在標頭檔案的最開始加入這條指令表示:這個標頭檔案只被編譯一次return c;
}
學習筆記1 C 總結
溫故而知新,總結過去,展望未來!一 函式過載 c 中允許通過換名機制實現函式過載,函式過載是指在相同的作用域中,允許存在多個函式名相同的函式 存在條件 他們的引數個數 引數型別 引數排列必須不同,返回值型別不做要求 二 異常處理 所謂異常,就是程式執行到某乙個函式或者方法內部時候,出現了與程式涉及流...
1 C 學習筆記 記憶體模型
c 和c語言對於變數定義的方式型別,定義的不同方式確定了變數的生存週期 作用範圍以及可以被誰使用的 許可權 問題。一般來講我們把儲存的持續性簡稱為變數在程式中定義的位置,有以下三個位置 1.自動儲存持續性 簡稱自動變數,該變數定義在具體的函式塊中,並且不加 static 這種修飾符,該類變數從函式被...
Unity學習筆記(1) C 的相關筆記
主要分為兩種型別 1 值型別 直接儲存在記憶體的棧上面 2 引用型別 在記憶體的棧上面衍生出乙個引用,在記憶體的堆上面才會儲存具體的值 3 指標型別 僅在不安全專案中使用 值型別 1 內建型別,如int bool等 2 使用者可自定義的struct型別及列舉enum型別 所有的值型別均繼承於syst...