为什么我的双指针为空?

时间:2017-11-09 08:40:07

标签: c pointers

这是我的代码:

Activeworkbook

我将我的功能称为:

Userform
编辑:我编辑了我的代码以添加main方法。 问题是,当我将spz传递给另一个方法后,它为null,这意味着我必须在方法n()中使用它作为三重指针,但是当我在方法n中的每个spz之前添加星号时它不起作用。您有任何想法如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

当您调用某个函数时,您将spz变量的副本main()函数传递到spz中的n()变量功能。然后,n()中的分配仅影响其本地spz

如果要返回指针值,则需要将指针传递给变量,例程必须取消引用指针才能到达原始变量:

void n( char ***spz_ptr)    // a pointer to (char **) variable
{
    *spz_ptr                // dereferenced pointer. i.e. the main's spz
        = malloc( ... );
}

void main()
{
    char **spz;

    n( & spz );             // pass a pointer to spz
    if( spz == NULL) {      // test the value assigned by n()
        ....  // handle the error
    }
    else {
        ....  // proceed with actual work
    }
}