返回指向C中指针参数的指针

时间:2016-07-25 22:13:06

标签: c pointers

我想知道为什么以下两个函数会返回不同的结果: GetPtr的结果始终为NULL,而GetPtr2返回指向参数的指针,即预期的行为。

#include <stdio.h>

unsigned char ** GetPtr(unsigned char *ptr)
{
    return &ptr;
}

unsigned char ** GetPtr2(unsigned char *ptr)
{
    unsigned char **ptr2 = &ptr;
    return ptr2;
}

int main()
{
    unsigned char *test = (unsigned char *) malloc(10 * sizeof(unsigned char));

    printf("%p \n", GetPtr(test));
    printf("%p \n", GetPtr2(test));

    free(test);

    return 0;
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

unsigned char ** GetPtr(unsigned char *ptr)
{
    return &ptr;
}               // <-- scope of ptr ends here

您正在使用超出范围的变量的地址。正如Monty Python短剧所拥有的那样,这是一只前鹦鹉

此函数返回局部变量的地址。当调用者收到该地址时,其地址的变量将不再在范围内。