c - 将结构体作为其单独的属性传递给函数

标签 c

我想将一个结构传递到一个(递归)函数中,每次调用该函数时,我都想更改它获取的属性的值,而不更新先前作用域中的实际值。

这是一些示例代码。这是实现这一点的正确方法吗? (“函数”文件中的函数调用需要具体帮助。

头文件

typedef struct Pos {
  int x;
  int y;
} Pos;

bool func1(Pos vars, int step);

主要

int main(int argc, char ** argv) {
  Pos vars = {.x = 0, .y = 0};

  if (func1(vars, 0)) {
    return EXIT_SUCCESS;
  }
  return EXIT_FAILURE;
}

函数

bool func1(Pos vars, int step) {
  if (step == 2) {
    return true;
  }

  func1({.x += 1, .y += 2}, step+1);

  printf("%d %d", vars.x, vars.y);

  return true;
}

最佳答案

您需要使用“复合文字”,它看起来像初始化程序之前的强制转换:

bool func1(Pos vars, int step) {
    if (step == 2) {
        return true;
    }

    func1((Pos){.x = vars.x + 1, .y = vars.y + 2}, step+1);

    printf("%d %d", vars.x, vars.y);

    return true;
}

此功能已添加到 C99 - 但由于您正在尝试使用指定的初始值设定项,因此这对您来说可能不是问题。

<小时/>

我看到 BLUEPIXYcomment 中指出了这个符号直到添加此答案后我才阅读。
我制作了这个社区 Wiki。

关于c - 将结构体作为其单独的属性传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494011/

相关文章:

c - snprintf 和 strncat 的执行速度如何比较?

c - 当以 0 超时调用时,poll() ingores 传入数据

检查回文

c - 在双向链表当前位置插入节点

大括号之间的代码和变量值的变化

c++ - 如何使用 C++ 对 Arduino 进行编程

c - __STDC_ISO_10646__ 的可能值

客户端断开连接后 C 套接字 TCP 服务器失败

c - 在 C 中高效实现 Bloom 过滤器?

c - 使用 gdb 调试链接库中的函数时遇到问题