在C语言中,如何在不使用数组或指针的情况下返回函数中的三个数字?

在C语言中,如何在不使用数组或指针的情况下返回函数中的三个数字?,c,function,C,Function,问题是: 编写一个接受三个整数的程序,然后按读取和反转的顺序打印它们。使用三个功能,一个读取数据,一个按读取顺序打印,一个按相反顺序打印 程序(未完成): #包括 int接受(){ int x,y,z; printf(“请输入三个整数:\n”); scanf(“%d%d%d”,&x,&y,&z); 返回x,y,z; } int main(){ x、 y,z=接受(); } 错误: 错误:“x”未声明(首次在此函数中使用)| 注意:每一个未声明的标识符对于它所使用的每个函数只报告一次 出现在|

问题是:

编写一个接受三个整数的程序,然后按读取和反转的顺序打印它们。使用三个功能,一个读取数据,一个按读取顺序打印,一个按相反顺序打印

程序(未完成):

#包括
int接受(){
int x,y,z;
printf(“请输入三个整数:\n”);
scanf(“%d%d%d”,&x,&y,&z);
返回x,y,z;
}
int main(){
x、 y,z=接受();
}
错误: 错误:“x”未声明(首次在此函数中使用)| 注意:每一个未声明的标识符对于它所使用的每个函数只报告一次 出现在| 错误:“y”未声明(首次在此函数中使用)| 错误:“z”未声明(此函数首次使用)|


如何修改此程序,以便在不使用数组或指针的情况下返回三个变量?或者不使用这些值是不可能的?

您可以创建一个包含这三个值的结构

typedef struct MyStruct
{
    int a, b, c;
} MyStruct;

然后向函数传递指向结构实例的指针(旁注:始终使用指针,因为它只传递8字节的值,所以效率更高。传递结构本身意味着(如果我没记错的话)编译器将在作为参数传递结构时尝试将结构拆分为其值)我的评论的扩展。这是合理的代码,在实践中不建议使用但这是修改代码以实现无数组或指针(或结构)的多个返回值要求的一种方法

#包括
int接受(char opt){
/*静态变量在调用之间记住它们的值*/
静态整数x,y,z;
如果(opt=='x')返回x;
如果(opt=='y')返回y;
如果(opt=='z')返回z;
/*opt的任何其他值,读入新值*/
printf(“请输入三个整数:\n”);
返回scanf(“%d%d%d”、&x、&y和&z);
}
int main(){
int x,y,z;
接受(“”);
x=接受('x');
y=接受('y');
z=接受('z');
}

据我所知,这是不可能的。有什么理由不使用指针吗?您可以返回一个结构,或者使用全局变量。因为您只有一个返回值,所以这种方法需要一个聚合(数组或结构)。可以有多个参数,但使用参数返回需要一个指针。或者正如William所说,您可以使用全局变量从函数中传递数据(但这是最糟糕的选择)。如果函数没有副作用,您可以轻松地执行此操作。只需传递一个指定所需变量的额外参数。然后为每个变量调用函数一次。编译器的效率越来越高,可以通过值优化函数返回对象的效果。很多年前我刚开始的时候不是这样的。构建结构并按值从函数返回它是非常好的。有趣。我得多读一点。这是我第一次学习C语言课程时,从我的教授那里学到的知识。但话说回来,我们用的都是ansi C90,所以可能是旧标准。但我仍然坚持我的评论。由于传递指针不会造成任何伤害,请注意,当您使用
printf
提示stdout并从stdin读取整数时,有关
返回期间未忽略的任何潜在副本的任何优化问题都是完全虚假的。更不用说这里的答案是推荐单指针副本加上3个指针间接寻址,而最坏的情况是从堆栈中复制3个整数副本。是的,我想在这种情况下,这是不必要的,因为它只有3个整数,但出于假设的原因。忽略操作码。你会说它适合于一个有50个不同值的结构吗。“不,”帕迪同意。只是忍不住回应人们说事情是不可能的…:-)好吧,但你不认为推广这样的解决方案是不负责任的吗?
typedef struct MyStruct
{
    int a, b, c;
} MyStruct;
#include <stdio.h>

int accept(char opt){
    /* static variables remember their values between calls */
    static int x, y, z;

    if (opt=='x') return x;
    if (opt=='y') return y;
    if (opt=='z') return z;

    /* any other value of opt, read in new values */
    printf("Please enter three integers: \n");
    return scanf("%d %d %d", &x, &y, &z);
}

int main(){
    int x, y, z;
    accept(' ');
    x = accept('x');
    y = accept('y');
    z = accept('z');
}