我正在尝试将ptr设置为指向结构数组中的第一个元素,这样当我回到主函数时,我就可以搞砸它了(这就是为什么我不能使用vArray [0]在主要)。
使用此代码,它只允许我访问alg函数中的结构成员。一旦它返回main,它的所有元素现在都是null。 (我认为它与传值/传递引用问题有关)。有什么方法可以解决这个问题吗?
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
}
答案 0 :(得分:2)
您需要"Need of Pointer to pointer"来反映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;
。注意数组名称衰减到此表达式中第一个元素的地址。
答案 1 :(得分:1)
您必须阅读pointer to pointer
。
检查此代码:
#include <stdio.h>
#include <stdlib.h>
struct vars {
int data;
};
void alg(struct vars *v, struct vars **ptr);
int main()
{
struct vars *ptr;
struct vars vArray;
vArray.data = 10;
alg(&vArray, &ptr);
printf("main : %d\n", ptr->data);
}
void alg(struct vars *v, struct vars **ptr)
{
*ptr = v;
printf("fun : %d\n", (*ptr)->data);
}
输出:
fun : 10
main : 10
答案 2 :(得分:0)
简而言之,使用双指针可以解决你的问题