void show(void *d) {
// 在这里,如何获取传入的d的具体类型,然后对不同的类型做处理
}
void show(void *d) {
if (sizeof(MyStruct) == sizeof((void *) d)) {
// d 是 MyStruct 指针
}
}
当然大小都一样的话,就不好判断了
C语言是弱类型语言。所有也就不存在判断类型的说法。
//这样的指针就是代表一个内存地址,没有类型信息。
//连边界都不包含
void *p
#include <stdio.h>
struct my_struct {
int a;
int b;
};
int main () {
struct my_struct *p = malloc(sizeof(struct my_struct));
p->a = 1;
p->b = 2;
int c = *((int *)p); //c === 1
int d = *((int *)p+1); //d ===2
printf("%d %d",c,d); //output: 1,2
}
ps:
c语言里面没有类型,只有你认为它是什么类型。明白了吧。
最直接的答案:不能。C语言没有运行时类型机制更没有反射机制,所以仅靠语言本身机制不可能知道void *原来是什么类型。
但是有变通的办法,你自己定义一些数据结构,数据结构的第一个字段都是一个int整数,表明当前结构是什么类型。你准备数据时设置上这个字段。然后把void 强制转换为int,取出那个标志,再根据需要把void *进一步转换为结构的指针。