如何将我从 main 制作的二维数组传递给 C 中的另一个函数

How do I pass in a 2d array I made from main into another function in C

所以我正在尝试制作一个二维二进制矩阵,它的大小由 stdin 提供,并且随机分配了 0 和 1 的索引,但是,它们不能超过 size/2 个零或一个.

例如

2的输入

可以输出

1 0

0 1

现在我原本打算在 init 中使用参数 int arr[][n] 但这个想法失败了,因为传入矩阵只会导致我的程序在我尝试时进行某种无限循环再次在主函数内部访问矩阵。我相信这是因为矩阵的寿命在 init 结束时到期了吗?所以我的问题是为什么我现在正在做的事情会产生以下错误,我该如何解决这个问题?

note: expected ‘int * (*)[(sizetype)(n)]’ but argument is of type ‘int (*)[(sizetype)(dim)][(sizetype)(dim)]’
    7 | int init(int n, int* arr[][n]);

我的代码

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



int init(int n, int* arr[][n]);
int main(){
    time_t t;
    srand((unsigned) time(&t));
    int dim;
    printf("Enter a positive even integer: ");
    scanf("%d",&dim);
    if(dim<2||dim>80){
        return 1;
        }
    int matrix[dim][dim];
    init(dim,&matrix);  
    
    
    
    return 0;
    }

int init(int n, int* arr[][n]){
    int numZeroes,numOnes;
    int zero_or_one;
    for(int row=0;row<n;row++){
        numZeroes=0;
        numOnes=0;
        for(int col=0;col<n;col++){
            if(numZeroes<n/2 && numOnes<n/2){
                zero_or_one=rand()%2;
                *arr[row][col]=zero_or_one;
                if(zero_or_one==1){
                    numOnes++;
                    }
                if(zero_or_one==0){
                    numZeroes++;
                    }
                }
            else{
                if(numZeroes==n/2 && numOnes<n/2){
                    *arr[row][col]=1;
                    }
                if(numZeroes<n/2 && numOnes==n/2){
                    *arr[row][col]=0;
                    }
            }
        }
        }
    
    for(int row=0;row<n;row++){
        for(int col=0;col<n;col++){
            printf("%d ",*arr[row][col]);
            
        }
        printf("\n");
    }
    return 0;
    }

函数应该这样声明

void init(int n, int arr[][n]);

(函数的 return 类型 int 意义不大。)

并称赞

init(dim, matrix);

在函数中而不是像这样的语句

*arr[row][col]=zero_or_one;

你必须写

arr[row][col]=zero_or_one;