我正在尝试实现以下功能:
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/