gpt4 book ai didi

c - 如何使用 C 在 64 位平台上将 void* 转换为 int?

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:15 25 4
gpt4 key购买 nike

我是负责 C 程序的语言学家,所以如果答案显而易见,请原谅。我有以下代码:

typedef struct array_s {
(...)
void **value;
} array_t;
typedef array_t *array_pt;

array_pt array_new (int size) {
(...)
array->value = (void **)malloc(size*sizeof(void *));
}

void* array_get (array_pt arr, int i) {
return arr->value[i];
}

int main () {
int a = 1234;
int *ptr = &a;

array_pt array = array_new(1);
array_add(array, ptr);

printf("%i\n", (int)array_get(array, 0));
}

它应该为我提供一个多用途数组(用于存储 intchar*,如果我理解我只能使用 void), 我想分配/释放没有问题。但是,我无法将它转换为任何有用的东西(即取回“原始”int/char*),据我所知,这可能是因为我在 64 位系统中,并且指向的指针的大小void 不同于指向 int/char* 的指针的大小(该程序应该在 64 位和 32 位系统中使用).我尝试使用 intptr_t 和其他替代方案,但没有成功。

我如何确定代码将接受任何数据类型并在 32 位和 64 位系统上工作?谢谢。

编辑:

抱歉没有添加array_add,这里是:

unsigned int array_add (array_pt array, void *ptr) {
(...) // get the next index
// allocate if needed
array->value = (void **)realloc(array->value, array->size*sizeof(void *));

array->value[index] = p;
}

最佳答案

您需要取消引用您的指针:

int* temp = array_get(array, 0);
printf("%i\n", *temp);

但是,我强烈建议避免使用这种方法。您基本上放弃了 C 中的编译器通常会提供的少量帮助 - 有目的地尝试制作非类型安全数组。

关于c - 如何使用 C 在 64 位平台上将 void* 转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349747/

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