将元素添加到结构的数组成员

时间:2016-09-06 17:46:37

标签: c

我有一个工会:

typedef union { int arr1[5]; char arr2[5]; } type

和结构:

typedef struct { int size; type elt; } foo

最后变量:

foo bar = { 3, {1,2,3} }

我想在bar中添加一个元素。因此我定义了:

void myfun(foo x, int new) 
{
      x.elt.arr1[x.size] = new;
      x.size += 1;
      return;
}

如果我致电myfun(bar,4),它应该适当更改条形码。但是,如果我在调用bar之前和之后查看myfun的元素,则会在没有其他元素的情况下打印bar

编辑:我的查看功能是:

void myprint(foo x)
{
     for ( int i = 0; i < x.size; i++) {
           printf("%d ", x.elt.arr1[i]);
      }
      return;
}

我的错是什么?

1 个答案:

答案 0 :(得分:1)

正如interjay写的那样,你不是在修改bar,而只是一个coppy(每次调用函数myfun时都会在内存中单独创建)。查找由值调用的函数和通过引用调用的函数之间的差异。你需要的是:

void myfun(foo *x, int new) 
{
    x->elt.arr1[x->size] = new;
    x->size += 1;
    return;
}

然后:

myfun(&bar,4)

这样,将编辑变量栏。