c - 错误 C2296 : '*' : illegal, 左操作数的类型为 'int *'

标签 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);
}

最佳答案

在你的代码中

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

应该是

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

或者,为了更好,

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

因为,您要为 mul 分配内存的次数是 sizeof(int)sizeof(*ArrofRows).

否则,正如目前所写,您正在尝试乘以一个指针(malloc() 的返回值),这是无效的。

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

Each of the operands shall have arithmetic type. [..]

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

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

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

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

关于c - 错误 C2296 : '*' : illegal, 左操作数的类型为 'int *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214641/

相关文章:

python - 检测用户何时完成 GTK 窗口的移动/调整大小

variables - 在 WebGL 中,属性、统一变量和变化变量之间有什么区别?

c++ - 矩阵中主对角线下的最大偶数。非常大的数字的解决方案?

android - 如何旋转图像而不改变其大小?

c - FFmpeg:协议(protocol)不在白名单 'file' 上!

c - 如何从文件描述符获取 FILE* 流?

c - (void*) -1 的重要性

c - 我有一个 .c.save 文件。它是什么?它有什么作用?

arrays - 检查方阵中的所有诊断是否为真

matlab - 如何将矩阵的大小加倍并在 Matlab 中传播其元素?