我正在阅读关于指针的指针,现在我想我比以前知道得少。 需要传递双指针才能更改该指针的值。但是,如果我们让我们说某些结构的指针并且我们想要改变它的某些成员(字段)的值,那么我们必须传递一个简单的指针。先前的陈述是否正确?
例如:
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;
}
我希望上面的例子可以解决问题。
答案 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();
}
指针与所有其他指针完全相同,因此您可以为其指定值。传递指针的地址就像传递int
或float
的地址,以允许从不同的函数内部进行变量修改。