如何将[5] [5]数组的指针传递给需要相同数组的双指针的函数?

时间:2019-06-01 06:53:40

标签: c arrays pointers matrix double-pointer

我正在制作一个程序,该程序可以计算方阵乘以其自身元素几次,并可以打印这些元素。

为此,我想将数组的指针提供给需要双指针的函数,但是我想要的数组 填充计算出的元素将为NULL,所以我很茫然。

我试图理解指针的工作原理,并将数组更改为数组的指针或指向数组的指针,但是我不明白它是如何工作的。

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

#define row 5
#define col 5
#define max 5
void input_matrix(float [][col], int n);
void output_matrix(float [][col], int n);
void multiply_matrix(float [][col], float [][col], float [][col], int n);
void power_matrix(float (**)[max],float [][col], int n, int k);
float A[row][col];
float B[row][col];
float ak[row][col];
int i, j, k, l, n;

int main() {
printf("What order square matrix do you want?\n");
scanf("%d", &n);
scanf("%d", &k);
if(n>max){
    fprintf(stderr, "Make it less than 5 digits.\n");
    return -1;
}

input_matrix(A, n);
power_matrix(ak, A, n, k);
output_matrix(A, n);

return 0;
}

void input_matrix(float a[][col], int n) {
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        printf("Enter the elemnt of row %d collumn %d.\n", i+1, j+1);
        scanf("%f", &a[i][j]);
    }
}

}

void output_matrix(float a[][col], int n){
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        printf("%f ", a[i][j]);printf("\n");
    }
}
}

void multiply_matrix(float ak[][col], float a[][col], float b[][col], int n){
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        for(l=0;l<n;l++){
            ak[i][j]+=a[i][l] * b[l][j];
        }
    }
}

}

void power_matrix(float (**ak)[col],float a[][col], int n, int k){
float (*x)[max], (*y)[max];
switch(k){
    case 1:
        *ak=a;
        break;

    case 2:
        multiply_matrix(*ak, a, a, n);
        break;

    default:
        multiply_matrix(*ak, a, a, n);
        for(i=3;i<=k;i++){
            x=*ak;
            y=B;
            multiply_matrix(y, a, x, n);
            *ak=y;
        }
}
}

我希望输出像 4.000000 4.000000 4.000000 4.000000

当输入为 2 2 1个 1个 1个 1

0 个答案:

没有答案