首页 > 解决方案 > 将二维数组除以函数中的常数

问题描述

我正在尝试创建一个将二维数组除以 2 的函数。我已经做到了,但它只划分了第一行。

//Header file
#ifndef divider
#define divider


void arrayDivider(float* a, int i, int j);

#endif
//declaration
#include <stdio.h>
#include "divider.h"

void arrayDivider(float* a, int i, int j){
    int x,y;
    
    for(x=0; x<i*j; x++){
        a[x] = a[x] /2;
    }
}
//main code
#include <stdio.h>
#include "divider.h"
int main(){
    float array[100][100];
    int i, j;
    int x=0, y=0;
    
    printf("Please enter rows of matrix => ");
    scanf("%d", &i);
    printf("Please enter columns of matrix => ");
    scanf("%d", &j);
    

    
    printf("Please enter elements of your matrix:\n");
    for(x=0; x<i; x++){
        for(y=0; y<j; y++){
            scanf("%f", &array[x][y]);
        }
    }
    
    arrayDivider(&array, i, j);

    printf("   Your matrix\n------------------\n");
    
    for(x=0; x<i; x++){
        for(y=0; y<j; y++){
            printf("%f  ", array[x][y]);
        }
        printf("\n");
    }

    return 0;
}

我希望这会将每个值除以 2,但它只除第一行。我找不到问题出在哪里。这段代码有什么问题?

标签: c

解决方案


随着arrayDivider(&array, i, j);您将指针传递给 2D 数组(即 a float ***),而不是 2D 数组本身。更正调用

arrayDivider(array, i, j);

并声明

void arrayDivider(float **a, int i, int j);

只是为了让您知道,在您使用 i 和 j 的地方使用 x 和 y 会更合乎逻辑,反之亦然。


推荐阅读