c++ - 如何将 n 级 void 指针取消引用为 int 指针

标签 c++ c pointers void-pointers

我正在尝试实现以下功能:

int foo(const void *p, unsigned int n);

p 实际上是一个指向 int 值的 n 级 指针,函数必须返回该值。所以:

  • n = 0:value = (int)(p);
  • n = 1:value = *(int*)(p);
  • n = 2: p 是一个指向 int 值的指针

等等……

所以,我认为下面的实现可能是正确的:

int foo(const void *p, unsigned int n) {

    if (!n) {

        return (int)p;
    }

    return foo((void*)*((int*)p), n - 1);
}

但是,在这段代码中,我假设指针的大小总是等于 int 的大小,我知道这不是真的。但是,由于 p 始终是指向 int 的指针(n 次),我想也许我总是可以将 p 转换为指向 int 的指针int 就像我在代码中所做的那样。

我的想法对吗?我在互联网上找不到与此类似的任何问题。

提前致谢!

最佳答案

递归的底例不正确,因为这假设 void*int 具有相同的宽度。

if (n == 1) return *(int*)p;

会更好。

关于c++ - 如何将 n 级 void 指针取消引用为 int 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581200/

相关文章:

c - 动态分配的字符串数组

c - c 中的 fscanf 使用 - 值未正确保存

c++ - 错误 C2248 : 'std::promise<_Ty>::promise' : cannot access private member declared in class 'std::promise<_Ty>'

c - getaddrinfo 无法解析深度超过两级的 FQDN

c - (C) 中分母为 d 的约化分数数

c - 无法理解指针语句

c - 指向字符串数组的指针在函数中可以,但在外部不行

c++ - 链接列表打印不正确?

c++ - 如何使用已安装的 firefox 或 chrome 在 C++ 应用程序中呈现 html

c++ - 我如何测量 C 代码的运行时间比较?