如何以编程方式取消引用指针?

时间:2018-04-06 03:22:49

标签: c

我昨天遇到的一个奇怪的面试问题

给定void *p指针和int a = 1;如何取消引用任何级别指针?

例如,

如果输入为1,那么您可以按*(int *)p

获取数据

如果输入为2,那么您可以通过**(int **)p

获取数据

如果输入为3,那么您可以按***(int ***)p

获取数据

但是如果输入是n怎么办?如何通过*xN(int *xN)p获取数据?

我完全不知道。

3 个答案:

答案 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次的递归函数,并在每次循环时取消引用一次指针,将结果传递给下一次迭代。