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

C 将元素添加到结构的数组成员,c,C,我有一个工会: typedef联合{int arr1[5];char arr2[5];}type 和一个结构: typedef结构{int size;type elt;}foo 最后是一个变量: foobar={3,{1,2,3} 我想在工具栏中添加一个元素。因此,我定义: void myfun(foo x, int new) { x.elt.arr1[x.size] = new; x.size += 1; return; } 如果我调用myfun(条,4

我有一个工会:

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

和一个结构:

typedef结构{int size;type elt;}foo

最后是一个变量:

foobar={3,{1,2,3}

我想在工具栏中添加一个元素。因此,我定义:

void myfun(foo x, int new) 
{
      x.elt.arr1[x.size] = new;
      x.size += 1;
      return;
}
如果我调用
myfun(条,4)
它应该适当地更改条。但是,如果我在调用
myfun
之前和之后查看
bar
的元素,它将打印
bar
,而不显示其他元素

编辑:我的视图功能是:

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

我的错在哪里?

正如interjay所写,您不是在修改条,而是在修改一个copy(每次调用函数myfun时都会在内存中单独创建)。查找按值调用的函数和按引用调用的函数之间的差异。您需要的是:

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

myfun(&bar,4)

这样,变量栏将被编辑。

如何“查看
栏的元素”
?你能提供一个函数吗?参数是按值传递的,所以你不是在修改原始结构,而是在修改一个副本。通过引用(&)更改你的调用,稍微修改一下你的函数,使其使用指针,应该是OK是的,我的错。编辑这篇文章,如果你发现一些错误,我不能在这台电脑上检查它,我对语法很糟糕:D。