我正在尝试将 ptr 设置为指向结构数组中的第一个元素,这样当我返回到我的主要函数时,我可以搞砸它(这就是我不能使用 vArray[0] 的原因)主要)。
虽然使用这段代码,它只允许我访问 alg 函数中的结构成员。一旦它返回到 main,它的所有元素现在都为空。 (我认为它与按值传递/按引用传递问题有关)。有什么办法可以解决这个问题吗?
void alg(struct vars v[], struct vars *ptr)
{
ptr = &vars[0];
printf("%s", ptr->value); //this works here
}
int main()
{
struct vars vArray[100]; //this has been filled earlier in the code
struct vars *ptr;
alg(vArray, ptr);
printf("%s", ptr->value); //but now this returns null here
}
最佳答案
你需要"Need of Pointer to pointer"以反射(reflect) main 函数中函数 alg() 的变化。
这样做:
void alg(struct vars v[], struct vars **ptr)
{
(*ptr) = &vars[0];
printf("%s", (*ptr)->value); //this works here
}
调用函数 main 为:alg(vArray, &ptr);
注意:main 中的ptr
和函数alg() 中的ptr
是两个不同的变量。
顺便说一句,出于学习目的,最好编写函数,否则您可以简单地在一行中完成:struct vars *ptr = vArray;
。请注意,数组名称衰减为此表达式中第一个元素的地址。
关于c - 将结构指针设置为等于另一个结构的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166994/