gpt4 book ai didi

c - 具有多个参数的返回语句

转载 作者:行者123 更新时间:2023-12-04 06:11:36 28 4
gpt4 key购买 nike

在激活 -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);
}

我知道数组作为引用传递到函数中,因此本质上不需要从该函数返回某些内容。但是,你能告诉我为什么有人会这样声明函数吗?这个工作人员让我很困惑。提前致谢

最佳答案

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;
}

关于c - 具有多个参数的返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com