将结构指针设置为等于另一个结构的地址

时间:2013-10-03 18:54:27

标签: c pointers struct

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

3 个答案:

答案 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)

简而言之,使用双指针可以解决你的问题