2018 9 30學習記錄

2022-05-10 20:46:08 字數 3450 閱讀 1783

1.

typedef常見用法

1.常規變數型別定義

例如:typedef unsigned char uchar

描述:uchar等價於unsigned char型別定義 uchar c宣告等於unsigned char c宣告

2.陣列型別定義

例如: typedef int array[2];

描述: array等價於 int [2]定義; array a宣告等價於int a[2]宣告

擴充套件: typedef int array[m][n];

描述: array等價於 int [m][n]定義; array a宣告等價於int a[m][n]宣告

3.指標型別定義

例如: typedef int *pointer;

描述: pointer等價於 int *定義;pointer p宣告等價於int *a宣告

例如: typedef int *pointer[m];

描述: pointer等價於 int *[m]定義 pointer p宣告等價於int *a[m]宣告明

4.函式位址說明

描述:c把函式名字當做函式的首位址來對待,我們可以使用最簡單的方法得到函式位址

例如: 函式:int func(void); unsigned long funcaddr=(unsigned long)func, funcaddr的值是func函式的首位址

5.函式宣告

例如: typedef int func(void); func等價於 int (void)型別函式

描述1: func f宣告等價於 int f(void)宣告,用於檔案的函式宣告

描述2: func *pf宣告等價於 int (*pf)(void)宣告,用於函式指標的生命,見下一條

6.函式指標

例如: typedef int (*func)(void)

描述: func等價於int (*)(void)型別

func pf等價於int (*pf)(void)宣告,pf是乙個函式指標變數

7.識別typedef的方法:

a).第一步。使用已知的型別定義替代typdef後面的名稱,直到只剩下乙個名字不識別為正確

如typedef u32 (*func)(u8);

從上面的定義中找到 typedef __u32 u32;typedef __u8 u8

繼續找到 typedef unsigned int __u32;typedef unsigned char __u8;

替代位置名稱 typedef unsigned int (*func)(void);

現在只有func屬於未知。

b).第二步.未知名字為定義型別,型別為取出名稱和typedef的所有部分,如上為

func等價於unsigned unsigned int (*)(unsigned char);

c).第三部.定義乙個變數時,變數型別等價於把變數替代未知名字的位置所得到的型別

func f等價於unsigned unsigned int (*f)(unsigned char)

typedef的語法規則其實很簡單,一句話來說就是定義物件的語法前加關鍵字typedef,剩下的不變,原本定義的物件識別符號換成型別識別符號,對應語義從定義乙個物件改成定義乙個型別別名。typedef看起來複雜根本原因是物件定義的語法比較複雜,例如分隔符*和的用法。

typedef struct nodebintnode;

對應的物件定義:

struct nodebintnode;

去除bintnode來看就是乙個型別struct node的完整描述。加上了bintnode來看,表示定義了乙個struct node型別的物件bintnode。

現在前面有typedef,因此這個bintnode不是物件名而是型別名。也就是定義了乙個型別別名bitnode,實際上指的就是struct node這個完整型別。

typedef定義的型別別名在作用域內和被定義的原型別語義上等價,都是表示同乙個型別的名稱。這裡typedef之後bitnode可以和struct node互相代替(注意在c++中,如果同一命名空間內型別名和物件名沒有重複,那麼struct可以省略,struct node等價於node)。

更複雜一點的:

struct nodebintnode, *bintree;

注意定義物件時*修飾物件本身而不是修飾型別。因此這裡定義了struct node物件bintnode和struct node*型別的物件bintree。

對應的型別定義:

struct nodebintnode, *bintree;

這裡定義了型別別名bintnode表示完整型別struct node,以及bintree表示型別struct node*。

拆開來就成了

typedef struct nodebintnode;

typedef bintnode *bintree;

這種寫法看起來應該稍微清楚了一點。

至於下面的cirqueue,和上面的bintnode類似,只是這裡省略了結構體名稱,是乙個匿名型別。這樣寫的主要好處是型別名可以省略struct(c++裡面不這樣寫也可以省略)。

2.  udt協議的介紹,應該沒事看看

3.ofstream fout,fout<>buffer;從fin輸入,到buffer中

string filename("d:\\test\\testfile");ifstream infile(filename);string line;while(infile>>line);

#endif

3.#define log4z_default_path "./log/"  true 可以這樣定義巨集,定義成乙個字串  或者true

#define max(x,y) (x)>(y)?:(x),(y)   t應該這樣#define abs(x) ((x)>0? (x):-(x))              

5.#define declare_message(x) x();  class a;

6.cout和cerr的區別

首先通過乙個例子就可以分析cout與cerr的區別,將下面**編譯鏈結後生成test.exe

1 #include   2     

3 int main()

4

在命令列模式下鍵入下面的命令: test >>cout.txt

執行結果是:   

在生成的cout.txt檔案中輸出了"hello world---cout"

同時在顯示器上輸出了"hello world---cerr"

多執行緒問題部落格:一定要看,而且windows核心程式設計也一定要看,太重要了!哎,沒把握時間好好看,哎

這是多執行緒6,再看看之前的5個,下面是**參考的,也不錯啊

非常好  

waitforsingleobject的用法  

了解下map和set的遍歷操作,看看例子,需要學習的太多了,基礎真的不行

mysql學習記錄 MySQL學習記錄 2

in 子查詢 select from student where id in 1,2 not in 不在其中 select from student where id not in 1,2 is null 是空 select from student where age is null is not...

java學習記錄

陣列雖然是引用資料型別,但它不是類 所以數字中沒有length 方法 只有length屬性。string型別 是乙個類 jdk中已經封裝好的類,是個final類,你可以去查api 類就有屬性和方法但是 string類中沒有length屬性,只有length 方法 1。陣列雖然是引用資料型別,但它不是...

Linux 學習記錄

1.linux 拷貝隱藏檔案 進入當前需要拷貝的目錄,即源目錄 假如 source 拷貝到 centos5.3 cd source tar cf cd centos5.3 tar xvf 或者 cp r centos5.3 2.linux 下新增postgresql 使用者 進入 postgresq...