我有一个工会:
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;
}
我的错是什么?
答案 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)
这样,将编辑变量栏。