C 二维数组中的指针

C 二维数组中的指针,c,C,我有这个矩阵乘法的代码,但它给了我一个编译错误。我不需要一个函数来接收3个矩阵及其维数N的指针作为参数 #include <stdio.h> #define N 100 void matrixmul(int **matA, int **matB, int **matC, int n){ int i,j,k; for(i=0;i<n;i++){ for(j=0;j<n;j++){ matC[i][j] = 0;

我有这个矩阵乘法的代码,但它给了我一个编译错误。我不需要一个函数来接收3个矩阵及其维数N的指针作为参数

#include <stdio.h>
#define N 100

void matrixmul(int **matA, int **matB, int **matC, int n){

    int i,j,k;

    for(i=0;i<n;i++){   
    for(j=0;j<n;j++){
        matC[i][j] = 0;
        for(k=0;k<n;k++){
        matC[i][j] += matA[i][k] * matB[k][j];
        }
    }
    }

}

int main(){

    int matA[N][N]={1};
    int matB[N][N]={3};
    int matC[N][N];

    int i,j,k;

    matrixmul(&matA, &matB, &matC, N);

    for(i=0;i<N;i++){   
    for(j=0;j<N;j++){
        printf("%d ", matC[i][j]);
    }
    printf("\n");
    }

    return 0;

}
指针不是数组。
所有
&matA
&matB
&matC
类型均为
int(*)[100][100]
(指针指向100个整数数组的100个数组),但函数
matrixmul
需要的参数类型为
int**
(除了
N
int
类型)。
将函数定义更改为

void matrixmul(int (*matA)[N], int (*matB)[N], int (*matC)[N], int n){ ... }  
并从
main
as调用它

 matrixmul(matA, matB, matC, N);

您可以尝试这些更改

void matrixmul(int matA[][N], int matB[][N], int matC[][N], int n)
可以这样调用这个函数

matrixmul(matA, matB, matC, N);

该错误是由指向指针的指针因数组而异这一事实引起的。数组是对象的固定长度集合,按顺序存储在内存中。指向指针的指针,即使它可以用作数组,编译器也不能保证2d矩阵的内存是连续的。 有一种方法可以帮助您实现您的梦想:

void matrixmul(int-matA[][N],int-matB[][N],int-matC[][N],int-N)

如果要将de-matrix作为指针传递给指针,则必须按如下方式分配内存:

int **array = new int *[N];

for(int i = 0; i<N; i++)

    array[i] = new int[N];`
int**array=newint*[N];

for(inti=0;imatrixmul(matA,matB,matC,N);@N.m.为什么?在他的作品中有更多的间接性sintax@JekyllL试试看,告诉我们它对你有多好。你有没有努力去理解错误消息是怎么说的?@n.m.错误消息…还是警告消息?我要试试
int **array = new int *[N];

for(int i = 0; i<N; i++)

    array[i] = new int[N];`