gpt4 book ai didi

c - 如何更改作为参数传递给函数的变量?

转载 作者:行者123 更新时间:2023-11-30 18:44:59 25 4
gpt4 key购买 nike

我正在尝试使用返回 void 的函数来更改结构内的一些变量。该函数采用 Struct 成员作为参数、结构数组和大小。该函数有一些代码,最终会更改结构成员内的一些变量。但是,我知道当您将某些内容作为参数传递给函数时,您正在使用副本而不是原始文件。因此,对结构成员所做的更改将不会被“保存”。

我对这个主题做了一些研究,发现指针是解决这个问题的一种方法。但问题是,我不知道如何使用指针,而且我发现的解释有点令人困惑。

指针是做到这一点的唯一方法吗?如果是这样,有人可以解释/告诉我如何在这种特定情况下使用指针吗?

最佳答案

How can i change a variable that is passed to a function as a parameter [...] using a function that returns void [...]

Are pointers the only way to do this?

是的。

如何执行此操作的示例:

#include <stdio.h> /* for printf() */

struct S
{
int i;
char c;
};

void foo(struct S * ps)
{
ps->i = 42;
ps->c = 'x';
}

int main(void)
{
struct S s = {1, 'a'}; /* In fact the same as:
struct S s;
s.i = 1;
s.c = 'a'
*/

printf(s.i = %d, s.d = %c\n", s.i, s.c);

foo(&s);

printf(s.i = %d, s.d = %c\n", s.i, s.c);
}

打印:

s.i = 1, s.d = a
s.i = 42, s.d = x

另一个例子是(取自/基于 Brunodeleted answer ):

void f(int * v1, float * v2)
{
*v1 = 123; // output variable, the previous value is not used
*v2 += 1.2; // input-output variable
}

int main(void)
{
int i = 1;
float f = 1.;

f(&i, &f);
// now i values 123 and f 2.2

return 0;
}

关于c - 如何更改作为参数传递给函数的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55990463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com