gpt4 book ai didi

c - 取消引用 void* 文字

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

我有以下代码:

  foo((void*)INT_MIN);

然后是函数foo(void* i)

int foo(void* i) {
return *(int*)i;
}

但是我遇到了一个段错误,大概是因为我不能取消对文字的引用?我错过了什么?

最佳答案

尝试:

int x = INT_MIN;

foo(&x);

int foo(void* i) {
return *(int*)i;
}

你不能直接取 INT_MIN 的地址,因为它不是常量,它是一个 #define。这就像做

foo(l, &(-2147483647 - 1));

请注意,根据体系结构和编译器,您通常可以:

foo((void*)INT_MIN);

int foo(void* i) {
return (int)i;
}

因此将 int 转换为 void*(在 Intel 架构上它可以工作,因为 sizeof(void*) >= sizeof(int)).它通常被认为是不好的,因为不能保证它能在其他架构上工作。

注意两个示例之间的区别。在第一个中,x 的地址被传递给 foo(void*),在那里它被转换为一个 int (int* ) 并取消引用到一个 int。在第二个中,int 被转换为 void*,然后重新转换为 int

关于c - 取消引用 void* 文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857485/

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