【问题标题】:How can i change a variable that is passed to a function as a parameter?如何更改作为参数传递给函数的变量?
【发布时间】:2019-09-23 05:16:09
【问题描述】:

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

我对该主题进行了一些研究,发现指针是解决此问题的一种方法。问题是,我不知道如何使用指针,而且我发现的解释有点混乱。

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

【问题讨论】:

  • "函数有一些代码" 很好。敢展示这个吗?以及显示调用它的代码?
  • 您是否考虑过真正阅读一本关于 C 编程的书

标签: c function variables struct parameters


【解决方案1】:

如何使用返回 void [...] 的函数更改作为参数 [...] 传递给函数的变量

指针是唯一的方法吗?

是的。

示例如何执行此操作:

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多