C++ void/指針與其他數據類型的相互轉換


在寫opencv多線程的時候用到了pthread_create()函數,

int  pthread_create(pthread_t *tidp, const  pthread_attr_t *attr,
( void *)(*start_rtn)( void *), void  *arg);

其中函數里最后一個變量聲明為void* args。因為涉及到函數之間的傳參,因此考慮將void*指針轉換為string類型存放opencv圖片存放路徑,因為void*指針的特殊性,將void*作為中間指針變量,在string轉換后的void*指針傳入后,再將void* 轉換為string類型,在調用的線程函數中imread(string path)。記錄下來這種思路,以作以后參考。

 

此外還有些小問題要注意
就是(char *)后面強制轉換的是空的話,可能會影響到控制台輸出問題

 

另外在c++11之前的時候 頭文件 不能char char_10[10] = "char_10";//錯誤 不能直接初始化

在gcc中卻是帶上11都沒法初始化,一直報錯array used as initializer

后來用string初始化,或者干脆不初始化 在其他地方
strcpy(char_10, "xxx");

string string_1 = "string_1";
string string_2 = "string_2";
char char_1 = 'char_1';
char char_2[] = "char_2";//不能在頭文件定義
char char_10[10] = "char_10";
 
void *p1 = &string_1;
void *p2 = &char_1;
void *p3 = &char_10;
void *p4 = (void *)string_2.c_str();
 
trace(string_1)//string_1
trace(char_1)//1
trace(char_10)//char_10
 
trace((string *)p1)//0x2cfc8c
trace((char *)p2)//11 這里多出來一個1
trace((char *)p3)//char_10
trace((char *)p4)//string_2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM