Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数返回两个在C中用逗号分隔的东西_C - Fatal编程技术网

函数返回两个在C中用逗号分隔的东西

函数返回两个在C中用逗号分隔的东西,c,C,好的,这是代码 #include <stdio.h> int addmult (int,int); int main (void) { int i=3,j=4,k,l; k = addmult(i,j); l = addmult(i,j); printf("%d %d\n",k,l); return 0; } int addmult ( int ii, int jj ) { int kk,ll; kk = ii + jj;

好的,这是代码

#include <stdio.h>
int addmult (int,int);
int main (void)
{
    int i=3,j=4,k,l;
    k = addmult(i,j);
    l = addmult(i,j);
    printf("%d %d\n",k,l);
    return 0;
}

int addmult ( int ii, int jj )
{
    int kk,ll;
    kk = ii + jj;
    ll = ii*jj;
    return(kk,ll);
}
#包括
int addmult(int,int);
内部主(空)
{
int i=3,j=4,k,l;
k=加法(i,j);
l=addmult(i,j);
printf(“%d%d\n”,k,l);
返回0;
}
int addmult(int ii,int jj)
{
内特kk,ll;
kk=ii+jj;
ll=ii*jj;
返回(kk,ll);
}
在C语言中,一个函数如何同时返回两个东西


编辑:这段代码非常有效。我想知道,它为什么工作?

你是在问线路是什么

return(kk,ll);
是否或如何从函数返回多个值

为了回答第一个问题,该代码在功能上等同于:

int ret = (kk,ll);
return ret;
return ll;
这可能会让事情更清楚一点。这是逗号运算符的一个实例,其计算结果为其第二个操作数,因此该代码实际上在功能上也等效于:

int ret = (kk,ll);
return ret;
return ll;
kk值从未使用过

要解决问题的第二种可能解释,请使用结构,例如:

struct product_and_sum
{
  int product;
  int sum;
};

将函数更改为返回一个
struct product\u和\u sum
,并返回一个适当初始化的结构值。

返回一个结构或数组(动态分配)。它不返回两件事,只返回一件事:
ll
。您需要了解逗号运算符,但为什么它会这样工作?函数如何一次返回两个值?它不是返回多个值。请注意return语句中的逗号(“,”)运算符,它从左到右求值,并返回最右边的表达式作为结果。因为12号被退回。我得到了这个。:)我还有一个疑问。如果一个函数返回一个值,那么当它返回时是否有必要收集它的值?@user3797829否这是可选的,例如您不通过
printf
function!收集返回的值。。。另外了解
ret=(kk,ll)之间的差异
ret=kk,ll好吧,如果你能在这里简单介绍一下,有什么区别?另外,对于用户定义的函数来说,不收集值也足够了,对吗?@user3797829:这不是必需的,例如,您有类似
foo()的指令。然而,如果您想明确地说结果被丢弃,那么您可以提供void cast,例如
(void)foo()。它对编译器没有任何影响,只对一些静态分析工具(如
splint
IIRC)有影响。@user3797829:lots和lots函数返回值<例如,code>sprintf
,返回“写入输出字符串的字符数”。问题是:返回值的用途是什么?对于
sprintf
,您可以使用返回值或忽略它。不使用
sqrt
的返回值会很奇怪。