将地址传递给C中的函数

时间:2011-04-10 01:23:11

标签: c function pointers memory-address

我是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;
}

这基本上就是我正在使用的结构。有人能帮我一把吗?

5 个答案:

答案 0 :(得分:8)

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

*x = 5;
*y = 5;

您目前正在做的是将指针设置为地址5.您可能会使用糟糕的旧编译器,但是好的编译器会在将int分配给int*时检测到类型不匹配变量,如果没有明确的演员表,你就不会这样做。

答案 1 :(得分:3)

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

会更改参数的值。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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;
}