从C中的函数返回多个值

时间:2015-12-12 13:18:31

标签: c function

int getPositionsH(int r, int ans, int size){
    int x=0;
    int y=0;
        if (ans==9){
            x =0;
        } else
            x=(rand()%size);

        y=(rand()%10);  
    return x;
    return y;
}

基本上这是c中应该返回2的函数 随机生成的位置x和y。但是在调试时我 注意到执行此操作后x和y仍为空。不知道 为什么因为我写了回报和一切。有什么想法吗?任何帮助 赞赏。

4 个答案:

答案 0 :(得分:4)

一个函数只能在C中返回一个值。实际上,该函数只返回x而语句return y;没有效果 - 它是无法访问的代码。

如果要返回多个值,可以传递指针并返回其内容中的值,也可以构造一个struct并返回值。

typedef struct position {
   int x;
   int y;
}pos_type;

pos_type getPositionsH(int r, int ans, int size){
    pos_type p;
    int x=0;
    int y=0;
        if (ans==9){
            x =0;
        } else
            x=(rand()%size);

        y=(rand()%10);  

    p.x = x;
    p.y = y;
    reutrn p;
 }

并且在来电者中:

pos_type t = getPositionsH(...);

int x = t.x;
int y = t.y;
.....

答案 1 :(得分:1)

你不能以这种方式返回两个值。

int getPositionsH(int r, int ans, int size)

被声明为int返回值将只返回一个 int

 return x;
 return y;

返回x后,程序执行将从函数返回,因此返回y 将无法访问。

答案 2 :(得分:0)

使用指针 x y 。该函数不是返回值,而是设置值:

void getPositionsH(int r, int ans, int size, int *x, int *y) {
    *x = ans == 9 ? 0 : rand() % size;
    *y = rand() % 10;
}

被称为

int x,y;
getPositionsH(r, ans, size, &x, &y);
// use x and y as you wish...
int total = x + 7 * y;

getPositionsH 被赋予两个指针(地址)到x和y。使用*x =设置 x 的值(在函数调用之前声明)。

<小时/> 注意

    *x = ans == 9 ? 0 : rand() % size;

语句相当于

    if (ans == 9) *x = 0;
    else *x = rand() % size;

答案 3 :(得分:0)

  

返回x;   返回y;

您使用过return x。这个函数会将值返回给调用函数现在它不会再返回并再次返回execute return y。每当你使用return语句时,你会记住实际返回语句的作用吗?

return语句终止函数的执行并将控制权返回给调用函数

因此,您可以参考this SO Q&amp; A来解决您的问题。其他答案也很不错。