4

我是 C 新手,我有一个计算一些变量的函数。但是现在让我们简化一下。我想要的是有一个“返回”多个变量的函数。尽管据我了解,您只能在 C 中返回一个变量。所以有人告诉我,您可以传递变量的地址并这样做。这就是我走了多远,我想知道我可以帮忙。我在 C90 禁止的东西等方面遇到了很多错误。我几乎可以肯定这是我的语法。

说这是我的主要功能:

void func(int*, int*);

int main()
{
    int x, y;
    func(&x, &y);

    printf("Value of x is: %d\n", x);
    printf("Value of y is: %d\n", y);

    return 0;
}

void func(int* x, int* y)
{
    x = 5;
    y = 5;
}

这本质上是我正在使用的结构。有人可以帮我看看吗?

4

5 回答 5

9

您应该使用*variable来指代指针指向的内容:

*x = 5;
*y = 5;

您当前所做的是将指针设置为地址 5。您可能会摆脱蹩脚的旧编译器,但一个好的编译器会在将 an 分配intint*变量时检测到类型不匹配,并且不会让您在没有显式转换的情况下这样做。

于 2011-04-10T01:25:07.943 回答
4
void function(int *x, int* y) {
    *x = 5; 
    *y = 5; 
}

会改变参数的值。

于 2011-04-10T01:27:36.803 回答
0

除了其他海报为您的函数体建议的更改之外,将您的原型更改为void func(int *,int *),并更改您的函数定义(在 main 下方)以反映 void。当您不指定返回类型时,编译器会认为您试图暗示 int 返回。

于 2011-04-10T01:26:45.030 回答
0

当实际上它是 func(int*, int*) 时,您不能转发声明 func(int,int)。此外,func的返回类型应该是什么?由于它不使用返回,我建议使用 void func(int*, int*)。

于 2011-04-10T01:29:07.490 回答
0

您可以返回结构类型的单个变量。

#include <stdio.h>
#include <string.h>

struct Multi {
  int anint;
  double adouble;
  char astring[200];
};

struct Multi fxfoo(int parm) {
  struct Multi retval = {0};
  if (parm != 0) {
    retval.anint = parm;
    retval.adouble = parm;
    retval.astring[0] = parm;
  }
  return retval;
}

int main(void) {
  struct Multi xx;
  if (fxfoo(0).adouble <= 0) printf("ok\n");
  xx = fxfoo(42);
  if (strcmp(xx.astring, "\x2a") == 0) printf("ok\n");
  return 0;
}
于 2011-04-10T14:44:14.457 回答