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。