以下是通過指標傳遞引數給新執行緒傳遞引數方法:
這種方法首先將要傳遞的資料轉換成通用指標型別,然後傳遞給新執行緒,新執行緒再將其還原成原資料型別:
void *start_routine(void *arg);
int main(void)
void *start_routine(void *arg)
這種方法雖然簡單,但卻有很大的侷限性。如:要求arg的型別必須能被正確地轉換成通用指標型別,而且可傳遞的引數只有乙個。
對下面的答案我並不滿意,還是沒懂。
因為對c語言並不精通,所以 對於轉換(void *)connfd有感覺納悶了,明明是整形,它轉化為通用指標到底變為什麼,有什麼作用呢?
void *指標只能儲存物件(也就是資料)指標。將函式指標轉換為void *指標是不可移植的。(在某些機器上,函式指標可能很大—–比任何資料指標都大。)但是,可以確保的是,所有的函式指標型別都可以相互轉換,只要在呼叫之前轉回了正確的型別即可。因此,可以使用任何函式型別(通常是int (*)()或void (*)(),即未指明引數、返回int或void的函式)作為通用函式指標。如果你需要乙個既能容納物件指標又能容納函式指標的地方,可移植的解決方案是使用包含void *指標和通用函式指標(任何型別都可以)的聯合。
下面是自己寫的函式,希望能用vc除錯看看,**如下:
#include
int test(void *arg)
int main(void)
輸出:6
#include
int main(void)
輸出:5
目前還不知道怎麼理解,但暫時都將它看作:把整形換為指標型進行傳遞,(此時指標變數不是用來存放位址的)然後可以通過強制型別轉化再次變為整形。
void* 表指向的物件型別不確定。void * 可以和任何指標直接做變換,除了函式指標外。 如:
int *pi;
void *pv;
pi=pv; //注意在c++編譯器中必須轉換 pi=(int*)pv;
pv=pi;
由於void * 可以和任何指標直接做變換,除了函式指標外,在c編譯器下,我們知道malloc函式的返回型別是void*,所以下2句是等價的
int *p =(int*)malloc(100*sizeof(int));
int *p =malloc(100*sizeof(int))
但是void* 不能做取值和小表操作
從通用型別開始
clr的技術其實是基於型別開始展開的。而型別是在公共的基礎架構上,也就是cts 通用型別系統 common type system msdn對cts的定義 1 建立乙個支援跨語言整合,型別安全和高效能 執行的框架。2 提供乙個支援完整實現多種程式語言的物件導向的模型。3 定義各語言必須遵守的規則,有...
通用型別系統概述
今天晚上看了.net 通用型別 的結構 以前沒有對它深入學習,對ta 的認識很很侷限,只知道怎麼用,不懂原理,就像俗話說的知其然不知其所以然。以前對這些基礎知識掌握的不牢靠,現在想通過 寫博文的方式加強記憶,寫的不好的地方還請大家 指出 我們一起討論 本人表達能力急待加強,汗顏 c 有兩種型別的資料...
面試題 指標 void 通用指標
返回目錄 問題 問 函式中的void和指標中的void 有什麼區別?答 在函式中的void是表示無型別或無返回型別。void指標是通用指標,用來存放任何資料型別的引用。分析 void真正發揮的作用在於 1.對函式返回的限定。2.對函式引數的限定。函式返回值 函式名 引數1,引數2,引數3,int s...