野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7840|回复: 10

void*

[复制链接]
发表于 2019-5-26 09:50:14 | 显示全部楼层 |阅读模式
请问 void* 作为参数时是不是可以接收所有数据类型, 不仅仅是所有指针类型, 比如说 int, char ... 基本数据类型?
回复

使用道具 举报

发表于 2019-5-26 18:55:02 | 显示全部楼层
应该是说作为可指向任何数据类型的指针
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-27 09:21:10 | 显示全部楼层
WishWish 发表于 2019-5-26 18:55
应该是说作为可指向任何数据类型的指针

不对啊, 我测试过, 而且 linux 内核中有很多这种用法啊
回复 支持 反对

使用道具 举报

发表于 2019-5-27 09:34:53 | 显示全部楼层
Linux用的C语言标准不一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-27 12:11:38 | 显示全部楼层
潮小男ㄨ 发表于 2019-5-27 09:34
Linux用的C语言标准不一样

但是我在 VC++ 环境下测试也是通过的啊
代码
#include <stdio.h>

void* test_func(void *a)
{
        return a;
}

void main(void)
{
        int a = 10;

        void *vp;        
        int *ip = &a;

        vp = ip;

        printf("%d \r\n", test_func(a));        // 可以接收任何值?
        printf("%p \r\n", test_func(&a));        
        printf("%d \r\n", sizeof(vp));
}
还有就是这两句的区别在哪?
        void *p;

        (char *)p += 1;
        (char *)p++;        // 这行会出错
回复 支持 反对

使用道具 举报

发表于 2019-5-27 14:33:59 | 显示全部楼层
这个就有点专业了,路过支持一波
回复 支持 反对

使用道具 举报

发表于 2019-5-28 09:48:21 | 显示全部楼层
曹董董 发表于 2019-5-27 12:11
但是我在 VC++ 环境下测试也是通过的啊
代码
#include

你用的啥编译器?printf("%d \r\n", test_func(a));打出是什么?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-28 15:22:58 | 显示全部楼层
WishWish 发表于 2019-5-28 09:48
你用的啥编译器?printf("%d \r\n", test_func(a));打出是什么?

打出的是10啊,就是 vc++啊
回复 支持 反对

使用道具 举报

发表于 2019-5-31 17:00:40 | 显示全部楼层
void*
表示支持任何指针类型
回复 支持 反对

使用道具 举报

发表于 2019-6-1 09:04:56 | 显示全部楼层
void * 可以说支持任何一种类型,也可以说是不支持任何一种类型,看你如何理解
有点类似:一切为空,空为一切
另外补充:标题不太合格
回复 支持 反对

使用道具 举报

发表于 2019-6-1 11:34:18 | 显示全部楼层
曹董董 发表于 2019-5-27 12:11
但是我在 VC++ 环境下测试也是通过的啊
代码
#include

可能是优先级问题,试试((char *)p)[0] +=1;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-17 09:33 , Processed in 0.029490 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表