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

标签 c

我有一个 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/

相关文章:

c - 为什么 C 中的递归会向后打印?

c - 不使用print语句给出输出

c - 以下程序是否会导致内存泄漏?

C - 创建结构的动态数组,结构成员打印错误的值?

c - 简单的C scanf 行不通?

c - 十进制转十六进制 : issues with sprintf?

c++ - execv,选择并阅读

C-divide 输入字符串 - 分割错误

c - 以编程方式设置类型/创建者代码

c - 逻辑运算符!关于整数值