【问题标题】:ADT, void pointers and int - problems with few related warnings in CADT、void 指针和 int - C 中相关警告很少的问题
【发布时间】:2013-12-15 05:17:31
【问题描述】:

我一直在与一个相当奇怪的情况作斗争。

我必须在 C 中实现一些 ADT 并使用它们。在使用 ADT 时,我有一个 typedef'ed void *。

当我尝试使用 int 值时,尝试返回一个预期为 void * 的 int,我收到警告“return make pointer from integer without a cast”。所以我想,我只是施放它。

但后来我遇到了this thread,它引导我不要做这样的事情,将 int 转换为 void *。不过,我不得不尝试。所以我收到了这个警告-“从不同大小的整数转换为指针”。

无论如何,我意识到——也许我可以直接返回 int,因为这只是在 ADT 的使用文件中。所以我更改了返回类型 - 我在其他地方收到了相同的警告,原因几乎相同,据我所知。

请帮助我摆脱这些警告。在这种情况下我该怎么办?我经历了一些关于这个问题的线程(比如我链接的那个),但其中任何一个都没有真正解决我的问题。

我有问题的功能: (MapKeyElement 是 typedef'ed void *)

static MapKeyElement copyKeyID(MapKeyElement n) {
    if (!n) {
        return 0;
    }
    int *copy = malloc(sizeof(int));
    if (!copy) {
        return NULL;
    }
    *copy = *(int *)&n;
    return (void *)*copy;
}

感谢您的宝贵时间!

【问题讨论】:

    标签: c casting void-pointers type-conversion abstract-data-type


    【解决方案1】:

    返回一个指向 int 的指针:

    void *return_int_data(int v) { 
       int *p = malloc(sizeof(int)); 
       p[0] = v; 
       return p; 
    }
    

    您可以对所有类型执行此操作。

    【讨论】:

    • 感谢您的回复。我将有问题的函数添加到主帖中,它包含了类似的想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2019-01-03
    • 2020-10-20
    • 2014-06-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多