C/C++中的 void*

在看《Unix/Linux系统编程》中关于POSIX Thread部分的时候发现C语言中用void*传递了int类型变量,很疑惑,于是查了些资料并汇总了一下。
介绍了C语言和C++中关于void*的用法,涉及到了C++中的reinterpret_cast
如果哪里有错误欢迎指正!
参考资料

参考资料

1. C/C++中的void*与其他指针类型转换

1.1 C中void*与其他指针类型转换

C语言对指针类型的转换要求很低。但是这将留下一个很大的漏洞

int*  a=NULL;	
void* b=NULL;
char* c=NULL;
c=a;	//warning C4133: “=”: 从“int *”到“char *”的类型不兼容,但是编译能通过
b=a;	//将void*和其他类型的指针相互赋值不会出现警告,这在C语言中是允许的
c=b;

如果非void类型相互转换,需要显式的强制类型转换*

int*  a=NULL;	
char* c=NULL; 
c=(char*)a;//将int*强制转换为char*类型

1.2 C++中void*与其他指针类型转换

C++中对类型要求很高,不允许不同类型指针之间的相互赋值,void指针例外(任何类型指针都可以赋值给void指针,但反之则不行)

int*  a=Null;	
void* b=Null;
char* c=Null;
c=a;//出错
b=a;//通过
c=b;//出错

如果要赋值必须显式强制类型转换(除了其他指针类型转换为void*类型)

C++中不建议用C风格的强制类型转换(type),而建议使用static_cast等c++强制类型转换符。针对这里出现的问题,static_cast可以将void*转换为其他指针类型,但是static_cast不能将两个毫无关联(如没有继承关系)的指针类型进行转换(如int*转换为char*)

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这段引用看起来是关于C++代码的一部分,它可能是在描述某个函数的参数和返回类型。具体来说,这个函数是`memchr`,它是一个C库函数,用于在给定的内存块搜索指定字符的第一次出现的位置。根据引用的描述,函数的参数包括一个指向要搜索的内存块的指针,一个待搜索的字符,以及要搜索的字节数。函数的返回类型是一个指向匹配字符的指针,如果找不到匹配字符,则返回空指针。 根据引用的内容,这是一个关于`memchr`函数的C++代码的声明和定义的片段,其包括了对输入参数的解释和对函数返回值的处理。具体来说,这个代码片段定义了一个名为`memchr`的函数,函数的参数类型和顺序与引用的描述一致。此外,还包括了一个`__attribute__((__nonnull__(1)))`的修饰符,该修饰符表示第一个参数是非空指针。 总的来说,这个引用描述了一个C++代码片段,其定义了一个名为`memchr`的函数,该函数用于在给定的内存块搜索指定字符的第一次出现的位置,并返回匹配字符的指针。修饰符`__attribute__((__nonnull__(1)))`表示第一个参数是非空指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Error处理:Invalid arguments ' Candidates are: void * memcpy(void *, const void *, ?) Error处理:...](https://blog.csdn.net/maochongsandai110/article/details/35551341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Error处置:Invalid arguments ' Candidates are: void * memcpy(void * const void * ?)](https://blog.csdn.net/xuewen720/article/details/52605046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值