包含多个参数的返回语句

时间:2015-08-28 07:44:55

标签: c arrays pointers return multiple-arguments

在激活-Wall编译我的C代码后,出现以下警告

left operand of comma operator has no effect

与我的return语句中提供的多个参数相关。故事如下: 假设有一堆动态分配的3D数组(A,B和C),并希望对它们进行一些操作。数组被定义为指向指针的指针,并使用malloc(标准过程)进行分配。对它们的操纵将在单独的功能中进行。出于某种原因,我将该函数声明为三指针,如下所示:

***func( double ***A, double ***B, double ***C)
{
  do some work here on A, B and C
  return(A, B, C);
}

我知道数组作为引用传递给函数,所以基本上不需要从这个函数返回一些东西。但是,你能告诉我为什么有人会这样宣布一个功能。这个工作人员让我困惑。提前致谢

2 个答案:

答案 0 :(得分:5)

return(A, B, C) is not C ,您可以使用struct返回多个参数。

struct array3d{
  double* A;
  double* B;
  double* C;
};

struct array3d* func(struct array3d* p) {
  /* do some work here on p->A, p->B and p->C */
  return p;
}

以下是***指针的工作示例:

#include <stdio.h>
#include <malloc.h>

struct array3d {
  double*** A;
  double*** B;
  double*** C;
};

struct array3d* func(struct array3d* p) {
  /* do some work here on A, B and C */

  ***p->A /= 42.0;
  ***p->B /= 42.0;
  ***p->C /= 42.0;

  return p;
}

int main()
{
    struct array3d arr;
    struct array3d* p_arr;

    double A[] = { 1.0,  3.0}; // ...
    double B[] = {-1.0, -2.0};
    double C[] = { 2.0,  4.0};

    double* p1A = A;
    double* p1B = B;
    double* p1C = C;

    double** p2A = &p1A;
    double** p2B = &p1B;
    double** p2C = &p1C;

    arr.A = &p2A;
    arr.B = &p2B;
    arr.C = &p2C;

    p_arr = func(&arr);

    printf("(A = %f, B = %f, C = %f)\n", ***p_arr->A, ***p_arr->B, ***p_arr->C);

    return 0;
}

答案 1 :(得分:0)

代码

.cargo

完全错了,即使它编译:

  1. 如果函数通过其参数***func( double ***A, double ***B, double ***C) { do some work here on A, B and C return(A, B, C); } AB返回所有内容,则它不应具有返回类型。例如,应该声明它返回C

    void
  2. 语法void func( double ***A, double ***B, double ***C) { 不符合您的想法。它不构造列表,也不会将三个值传递给return(A, B, C)。相反,它评估表达式return,抛出其值,评估A,抛弃其值,评估B,取值C作为值C表达式(A, B, C),最后从函数中返回该值。 (谷歌“C逗号运营商”了解更多信息。)

  3. 如果您的函数被声明为返回void(可能应该如此),则根本不需要return语句。