从函数返回多个值

从函数返回多个值有人能告诉我如何从函数返回多个值吗?
请举例说明一下?

蓝山帝景
浏览 441回答 3
3回答

蝴蝶刀刀

您在这里的选择是返回一个包含您喜欢的元素的结构,或者使用函数来处理带有指针的参数。/* method 1 */struct Bar{     int x;     int y;};struct Bar funct();struct Bar funct(){     struct Bar result;     result.x = 1;     result.y = 2;     return result;}/* method 2 */void funct2(int *x, int *y);void funct2(int *x, int *y){     /* dereferencing and setting */     *x  = 1;     *y  = 2;}int main(int argc, char* argv[]) {     struct Bar dunno = funct();     int x,y;     funct2(&x, &y);     // dunno.x == x     // dunno.y == y     return 0;}

守着一只汪

你不能直接这么做。您的选项是将多个值包装到一个结构中,或者将它们作为指针参数传递给函数。G.typedef struct blah{     int a;     float b;} blah_t;blah_t my_func(){     blah_t blah;     blah.a = 1;     blah.b = 2.0f;     return blah;}或:void my_func(int *p_a, float *p_b){     *p_a = 1;     *p_b = 2.0f;}

慕尼黑5688855

首先,后退一步,询问为什么需要返回多个值。如果这些值在某种程度上不相关(无论是功能上的还是操作上的),那么您需要停止并重新考虑您正在做的事情。如果各种数据项是较大的复合数据类型的一部分(例如邮件地址,或销售订单中的行项,或由多个属性描述的其他类型),则定义一个struct类型来表示单值这种综合类型:struct addr { // struct type to represent mailing address   char *name;   int streetNumber;   char *streetName;   char *unitNumber;    char *city;   char state[3];   int ZIP;};struct addr getAddressFor(char *name) {...}struct point2D {   int x;   int y;};struct polygon2D {   size_t numPoints;   struct point2D *points;};struct point2D getOrigin(struct polygon2D poly) {...}做不定义一个结构来收集与彼此无关的随机项;这只会给您和任何需要维护代码的人带来混乱。如果数据项在功能上不相关,而是以某种方式操作上相关(例如,数据加上状态标志加上关于操作或项的元数据,作为单个输入操作的一部分),然后使用多个可写参数。最明显的例子是*scanf()函数在标准库中。还有strtod()和strtol()函数,该函数转换数字的字符串表示形式;它们返回转换后的值,但它们也编写未转换为单独参数的第一个字符:char *str = "3.14159";double value;char *chk;value = strtod(str, &chk);if (!isspace(*chk) && *chk != 0)   printf("Non-numeric character found in %s\n", str);您可以将这些方法结合在一起;下面是一个受我目前正在做的工作启发的示例:typedef enum {SUCCESS, REQ_GARBLED, NO_DATA_OF_TYPE, EMPTY, ERROR} Status;typedef struct bounds {...} Bounds; tyepdef struct metadata {   size_t bytesRead;   size_t elementsRead;   size_t rows;   size_t cols;} Metadata;typedef struct elevations {   size_t numValues;   short *elevations;} Elevations;Elevations elevs;Metadata meta;Bounds b = ...; // set up search boundaryStatus stat = getElevationsFor(b, &elevs, &meta);我请求提升数据的服务返回值的一维序列;数组的维度作为元数据的一部分返回。
打开App,查看更多内容
随时随地看视频慕课网APP