我想将一个结构传递给一个(递归)函数,每次调用该函数时,我想更改它获取的属性的值,而不更新前一个范围中的实际值。
以下是一些示例代码。这是实现这个的正确方法吗? (“功能”文件中函数调用所需的特定帮助。
标题文件
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;
}
答案 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中 - 但由于您尝试使用指定的初始值设定项,因此可能对您没有任何问题。
答案 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;
}