为什么该函数不将值返回给另一个变量,而不是用作操作数的变量?

Why doesn't the function return a value to another variable than the one used as operand?

提问人:Yannis Ravasopoulos 提问时间:12/15/2022 最后编辑:Yannis Ravasopoulos 更新时间:12/19/2022 访问量:50

问:

我正在制作一个高斯消元程序,我使用的函数以静态数组的形式应用于矩阵,该矩阵是结构体 MATRIX 的成员。我想将矩阵的新消除行梯队形式作为新的结构变量返回。设 1 是我设置要消除的矩阵,我想使矩阵 2 保持矩阵的 1 行梯队形式。

这是包含静态变量数量的结构定义(我已将其设置为):struct matrix MATRIX[10]

struct matrix{
    float array[k][l];
    char line[k];
    char column[l];
    int inversity;
};

这是功能段:

float gauss(struct matrix MATRIX[],int n){
    int row=0,flag=0;
    while(row<k){
        //LEFTMOST NON-ZERO COLUMN ID 
        int j=0,cid,rid;
        flag=0;
        while((j<l)&&(flag!=1)){
            int i=row;    
            //printf("i value is: %d\n",i);
            while((i<k)&&(flag!=1)){    
                if(MATRIX[n].array[i][j]!=0){    
                    flag=1;    
                    cid=j; 
                    rid=i;    
                }    
                i++;    
            } 
            j++;
        }//printf("Leftmost column with at least a non-zero char is: %d and its location is: %d,%d\n",cid,cid,rid);
    //SWAPPING WITH CEILING ROW
        if(flag!=0)
            for(int j=0; j<l; j++){
                    float temp=MATRIX[n].array[rid][j];
                    MATRIX[n].array[rid][j]=MATRIX[n].array[row][j];
                    MATRIX[n].array[row][j]=temp; 
            }
        //printf("Swapping done:\n"); printmatrix(MATRIX,1);
    //SETTING LEAD 1
        float temp=MATRIX[n].array[row][cid];
            if(temp!=0){
                for(int j=0; j<l; j++){
                    MATRIX[n].array[row][j]/=temp;
                }
            }//printf("Set lead:\n"); printmatrix(MATRIX,1);
    //OPERATION SEGMENT
            for(int i=(row+1); i<k; i++){
                float temp=MATRIX[n].array[i][cid];
                //printf("temp is %.2f\n",temp);
                    for(int j=0; j<l; j++){
                        //printf("sub factor is %.2f\n",(-1*temp*MATRIX[n].array[row][j]));
                        MATRIX[n].array[i][j]+=(-1*temp*MATRIX[n].array[row][j]);
                    }//printmatrix(MATRIX,1);
            }//printf("Done operations:\n"); printmatrix(MATRIX,1);
            row++;
    }
    for(int i=0; i<k; i++)
        for(int j=0; j<l; j++)
            if(MATRIX[n].array[i][j]==(-1*0)) MATRIX[n].array[i][j]=0;
    printf("Done final operations:\n"); printmatrix(MATRIX,n);
    return MATRIX[n+1].array[k][l];
}

之后,我使用以下命令将新矩阵分配给新的结构变量:

MATRIX[n+1].array[k][l]=gauss(MATRIX,rem);
C 函数 矩阵 按参考传递 高斯过程

评论

1赞 001 12/15/2022
return MATRIX[+].array[k][l];这是否与 ?+
1赞 Bodo 12/15/2022
gauss(MATRIX[n].array[][]) = MATRIX[n+1].array[][]不能赋值给函数的返回值。请编辑您的问题,并使用示例说明您想要实现的目标。
0赞 Andrew Henle 12/15/2022
返回值就是 - 一个。不能为分配其他内容。分配给是没有意义的。724
0赞 Barmar 12/16/2022
不能在表达式中使用。 只能在带有初始值设定项的数组声明中使用,这意味着从初始值设定项的数量中获取数组大小。所以没有意义。[][]MATRIX[n].array[][]

答: 暂无答案