C将指针传递给函数中的指针

时间:2016-01-30 16:09:10

标签: c pointers

我正在阅读关于指针的指针,现在我想我比以前知道得少。 需要传递双指针才能更改该指针的值。但是,如果我们让我们说某些结构的指针并且我们想要改变它的某些成员(字段)的值,那么我们必须传递一个简单的指针。先前的陈述是否正确?

例如:

struct A* a;
void func(struct A* arg)
{
   arg->mem1 = 5;
}

struct *A a;
void func(struct A** arg)
{
   *arg = malloc(struct A);
   (*arg)->mem1 = 5;
   return;
}

我希望上面的例子可以解决问题。

2 个答案:

答案 0 :(得分:0)

是的,你是对的。您只需传递pointer to struct即可更改结构变量中的字段。这是因为您没有更改地址,而是存储在指针指向的结构var中的值。

如果需要分配内存或更改指针指向的地址,如果需要在调用函数中反映,那么第二个函数就可以了。

答案 1 :(得分:0)

是的,你是对的。 如果要将结构传递给必须更改其某些文件的函数,则需要指向结构的指针,以便被调用函数知道结构在内存中的位置并可以访问/更改文件:

void foo(struct a *pStruct)
{
    pStruct->field1 = 0;  //this field will be read modified.
}

现在,如果你想分配一个结构,你必须传递指针:

struct Mystruct *ptr;
...
AllocMyStruct(&ptr);
ptr->field1 = 0;

AllocMyStruct可以分配内存,因此ptr将指向一个新的(动态)创建的结构:

AllocMyStruct(Mystruct **p)
{
    *p = malloc(sizeof(struct Mystruct));
    if (p==NULL)
        Error();
}

指针与所有其他指针完全相同,因此您可以为其指定值。传递指针的地址就像传递intfloat的地址,以允许从不同的函数内部进行变量修改。