我正在尝试实现以下功能:
int foo(const void *p, unsigned int n);
其中p实际上是指向int值的n级指针,并且该函数必须返回该值。所以:
value = (int)(p);
value = *(int*)(p);
等等...
因此,我认为以下实现可能是正确的:
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;
会更好。