我昨天遇到的一个奇怪的面试问题
给定void *p
指针和int a = 1;
如何取消引用任何级别指针?
例如,
如果输入为1,那么您可以按*(int *)p
如果输入为2,那么您可以通过**(int **)p
如果输入为3,那么您可以按***(int ***)p
但是如果输入是n
怎么办?如何通过*xN(int *xN)p
获取数据?
我完全不知道。
答案 0 :(得分:1)
完全没有经过测试,但我认为这种递归解决方案大致正确:
int get_pointer(void* p, int n)
{
if (n==1) return *p;
return get_pointer((void*)(*(int*)p), n-1);
}
答案 1 :(得分:1)
这样的事情:
int dereference(void *p, int n) {
for (int i = 0; i < n; i++) {
p = *((void **) p);
}
return (int)p;
}
答案 2 :(得分:0)
脱离我的头脑:您可以使用for循环或运行input
次的递归函数,并在每次循环时取消引用一次指针,将结果传递给下一次迭代。