gpt4 book ai didi

c - ADT、void 指针和 int - C 中几乎没有相关警告的问题

转载 作者:行者123 更新时间:2023-11-30 17:43:13 24 4
gpt4 key购买 nike

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

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

当我尝试使用 int 值时,尝试返回一个需要 void * 的 int ,我收到警告“返回使指针来自整数而不进行强制转换”。所以我想,我就转换它吧。

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

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

请帮助我消除这些警告。在这种情况下我该怎么办?我浏览了一些有关此问题的线程(如我链接的线程),但其中任何一个都没有真正解决我的问题。

我的有问题的函数:(MapKeyElement 类型定义为 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;
}

感谢您的宝贵时间!

最佳答案

返回一个指向 int 的指针:

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

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

关于c - ADT、void 指针和 int - C 中几乎没有相关警告的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20278479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com