我有一个 union :
typedef union { int arr1[5];字符 arr2[5]; } 类型
和一个结构:
typedef struct { int size;输入 elt; }富
最后是一个变量:
foo bar = { 3, {1,2,3} }
。
我想在栏中添加一个元素。因此我定义:
void myfun(foo x, int new)
{
x.elt.arr1[x.size] = new;
x.size += 1;
return;
}
如果我调用 myfun(bar,4)
,它应该适本地改变 bar。但是,如果我在调用 myfun
之前和之后查看 bar
的元素,它将打印 bar
而没有附加元素。
编辑:我的 View 函数是:
void myprint(foo x)
{
for ( int i = 0; i < x.size; i++) {
printf("%d ", x.elt.arr1[i]);
}
return;
}
我有什么错?
最佳答案
正如 interjay 所写,您没有修改 bar,而只是修改了一个副本(每次调用函数 myfun 时都会在内存中单独创建)。查找按值调用的函数和按引用调用的函数之间的区别。你需要的是:
void myfun(foo *x, int new)
{
x->elt.arr1[x->size] = new;
x->size += 1;
return;
}
然后:
myfun(&bar,4)
这样,变量 bar 将被编辑。
关于c - 将元素添加到结构的数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354997/