将struct作为其各自的属性传递给函数

时间:2017-02-27 19:18:21

标签: 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;
}

2 个答案:

答案 0 :(得分:1)

你需要使用'复合文字',它看起来像初始值之前的强制转换:

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。

答案 1 :(得分:-1)

这是一个代码,也许它可以帮助你

#include <iostream>
#include <cstdio>
using namespace std;


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

Pos * initializeStruct (int x1, int y1) {
    Pos * vars = new Pos();
    vars->x = x1 + 1;
    vars->y = y1 + 2;
    return vars;
}

bool func1(Pos *, int );

int main(int argc, char ** argv) 
{
    Pos *vars = new Pos();
    vars->x = 0;
    vars->y = 0;

    if (func1(vars, 0)) {
        return 1;
    }
    return 0;
}

bool func1(Pos *vars, int step) {
    if (step == 2) {
        return true;
    }
    func1(initializeStruct(vars->x, vars->y), step+1);

    printf("%d %d\n", vars->x, vars->y);

    return true;
}