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