声明要向下游推送类型处理的空指针

问题描述 投票:1回答:1

是否经常执行以下操作:

void *x = (void *) "one";
void *y = (void *) 2;
void *z = (void *) NULL;

而不是:

char * x = "one";
int y = 2;

我问这个的原因是能够调用可以接受多种类型的函数。例如,可在javascript中使用各种元素的组合。似乎使用(void *)只是表示“任何类型”的简单方法。

c void
1个回答
0
投票

否,因为您不能取消引用空指针:您必须知道要存储的类型,使该想法无用。

您可能正在寻找的是variant type

enum type {
    CHAR, INT, DOUBLE, STR
};

typedef struct {
    union {
        char   c;
        int    i;
        double d;
        char   *str;
    };
    enum type t;
} variant;

这不是一个非常实用的解决方案,但适用于仅需要几种类型的琐碎代码。

© www.soinside.com 2019 - 2024. All rights reserved.