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

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的指针。

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

    提前致谢!

    最佳答案

    您的递归大写不正确,因为这假定void*int具有相同的宽度。

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

    会更好。

    10-07 19:17
    查看更多