在C中传递和返回变量

时间:2011-02-27 02:12:25

标签: c parameter-passing

我正在尝试将变量从一个函数传递到另一个函数。

例如:

FuncA:从用户接收3个输入,我想在FuncB中使用这3个输入。

我该怎么做?我只是从FuncA返回3个值并将其作为Func B的参数传递给它吗?

我会这样做吗? **不使用指针。

int FuncA(void);
int FuncB(int A, int B, int C, int D, int E);

int main(void)
{
    FuncA(void);
    FuncB(A,B,C);
}

int FuncA(void)
{
    printf("Enter 3 number:");
    scanf("%d %d %d" &A, &B, &C);
    return A, B, C;
}

int FuncB(int A, int B, int C)
{
    .............
}

5 个答案:

答案 0 :(得分:6)

首先,每个函数只能return一个值。这可能会让你问,“如何从FuncA获得A,B和C的值?”

你对指针了解多少?如果你没有牢牢掌握什么指针以及它们是如何工作的,那么解决方案将很难理解。

解决方案是传递3个指针(一个用于A,B和C),以便FuncA可以为它们分配值。这不使用return关键字。它在内存中的特定位置分配值,即A,B和C.

int FuncA(int* A, int* B, int* C)
{
    printf("Enter 3 number:");
    scanf("%d %d %d", A, B, C);
}

现在A,B和C包含用户输入,我们可以将这些值传递给FuncB。你的最终代码应如下所示:

int FuncA(int* A, int* B, int *C);
int FuncB(int A, int B, int C);

int main(void)
{
    int A;
    int B;
    int C;

    FuncA(&A, &B, &C);
    FuncB(A, B, C);
}

int FuncA(int* A, int* B, int* C)
{
    printf("Enter 3 number:");
    scanf("%d %d %d", A, B, C);
}

int FuncB(int A, int B, int C)
{
    // ...
}

答案 1 :(得分:5)

一种方法:

typedef struct {
  int a;
  int b;
  int c;
} ABC;

ABC funcA(void);
{
    ABC abc;
    printf("Enter 3 numbers: ");
    fflush(stdout);
    scanf("%d %d %d", &abc.a, &abc.b, &abc.c);
    return abc;
}

void funcB1(ABC abc)
{
    ...
}

void funcB2(int a, int b, int c)
{
    ...
}

int main(void)
{
    funcB1(funcA());  // one alternative

    ABC result = funcA();  // another alternative
    funcB2(result.a, result.b, result.c);
    ...
}

答案 2 :(得分:4)

我会像这样设置你的系统:

void FuncA(int *A, int *B, int *C);
int FuncB(int A, int B, int C);

int main(void)
{
  // Declare your variables here
  int A, B, C;
  // Pass the addresses of the above variables to FuncA
  FuncA(&A, &B, &C);
  // Pass the values to FuncB
  FuncB(A, B, C);
}

void FuncA(int *A, int *B, int *C)
{ 
  printf("Enter 3 numbers: ");
  fflush(stdout);
  scanf("%d %d %d", A, B, C);
}

int FuncB(int A, int B, int C)
{
    //...
}

答案 3 :(得分:0)

FuncA正在返回一个int。假设你想用A,B,C参数调用FuncB并返回FuncA的调用者,无论FuncB返回什么,你想要这样的东西。

int FuncA(void)
{ 
printf("Enter 3 number:");
scanf("%d %d %d" &A, &B, &C);
return FuncB(A, B, C);
}

答案 4 :(得分:-3)

将A,B和C声明为全局变量:

int A, B, C;
int FuncA(void);
int FuncB(int A, int B, int C);
....

并从任何函数访问它们,无论参数与否。或者声明它们是静态全局变量以限制全局范围的可能损坏。