错误C2296:' *' :非法,左操作数有类型' int *'

时间:2015-08-25 21:46:07

标签: c matrix

我正在尝试制作一个将2个矩阵乘以一个新矩阵的函数,它几乎已经完成但是我很难弄清楚这条线的错误

以下是代码:

#include<stdio.h>
#include<stdlib.h>

#define ROWS_1  3
#define ROWS_2  3
#define COLS_1  3
#define COLS_2  2


int* matrixMultiply(int mat1[ROWS_1][COLS_1],int mat2[ROWS_2][COLS_2])
{
    int mul = (ROWS_1)*(COLS_2);
    int* ArrofRows;
    int sum=0,i,j,k;
    ***ArrofRows = (int*)malloc(mul)*sizeof(int);***
    if (COLS_1 != ROWS_2)
    {
        printf("ERROR!! Operation Failed!Exiting...\n");
        exit(0);
    }
    else
    {
        for( i=0 ; i<ROWS_1 ; i++)
        {
            for( j=0 ; j<COLS_2 ; j++)
            {
                for( k=0 ; k<COLS_1 ; k++)
                {
                    sum += (mat1[i][k]*mat2[k][j]);
                }
                ArrofRows[(i*ROWS_1)+j] = sum;
                sum = 0;
            }
        }
    }
}

void main()
{
    int mat1[ROWS_1][COLS_1] = {{2,6,9},{3,5,4},{6,7,8}};
    int mat2[ROWS_2][COLS_2] = {{2,4},{6,1},{4,8}};
    int* NewMat;
    NewMat = matrixMultiply(mat1,mat2);
}

1 个答案:

答案 0 :(得分:4)

在您的代码中

 ArrofRows = (int*)malloc(mul)*sizeof(int);

应该是

ArrofRows = malloc(mul *sizeof(int));

或者,为了更好,

ArrofRows = malloc(mul *sizeof(*ArrofRows));

as,您希望为mulsizeof(int)给出的sizeof(*ArrofRows)次大小的内存分配内存。

否则,正如当前编写的那样,您试图将指针(返回值malloc())相乘,这是无效的。

FWIW,引用乘法运算符(*)的属性,来自C11,章节§6.5.5,

  

每个操作数都应具有算术类型。 [..]

并且指针不是算术类型。因此错误。

也就是说,在使用返回的指针之前,总是通过检查返回值为NULL来检查malloc()是否成功。

另请参阅why not to cast the return value of malloc() and family

最后,我了解此代码可能只是一个片段,但在这种情况下,您的matrixMultiply()函数应该返回一个值。