0

我正在尝试将 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
}
4

3 回答 3

2

您需要“需要指针”来反映主函数中函数 alg() 的变化。

这样做:

void alg(struct vars v[], struct vars **ptr)
{
   (*ptr) = &vars[0];
   printf("%s", (*ptr)->value); //this works here
}

并调用函数 main 为: alg(vArray, &ptr);

注意:ptr在 main 和ptr函数 alg() 中都是两个不同的变量。

顺便说一句,为了学习目的,编写函数很好,否则你可以简单地在一行中完成它:struct vars *ptr = vArray;. 注意数组名称衰减为该表达式中第一个元素的地址。

于 2013-10-03T18:57:19.570 回答
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
于 2013-10-03T19:07:31.503 回答
0

总之使用双指针它会解决你的问题

于 2013-10-03T20:19:43.360 回答