Arrays 如何将从main生成的2d数组传入C中的另一个函数

Arrays 如何将从main生成的2d数组传入C中的另一个函数,arrays,c,pointers,parameters,function-definition,Arrays,C,Pointers,Parameters,Function Definition,因此,我试图制作一个2d二进制矩阵,它的大小是由stdin提供的,并且它为0和1随机分配了索引,但是,它们的大小不能超过0或1 比如说 输入2 可以输出 10 01 现在我本来打算在init中使用参数int arr[][n],但这个想法失败了,因为传入矩阵只会导致我的程序在尝试再次访问主函数内部的矩阵时进行某种无限循环。我相信这是因为init结束时矩阵的寿命已经过期了?所以我的问题是,为什么我现在所做的会产生下面的错误,我该如何解决这个问题 note: expected ‘int * (*)[(

因此,我试图制作一个2d二进制矩阵,它的大小是由stdin提供的,并且它为0和1随机分配了索引,但是,它们的大小不能超过0或1

比如说

输入2

可以输出

10

01

现在我本来打算在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;
    }
#包括
#包括
#包括
int init(int n,int*arr[][n]);
int main(){
时间;
srand((未签名)时间(&t));
int-dim;
printf(“输入一个正偶数整数:”);
扫描频率(“%d”和(&d);
如果(dim80){
返回1;
}
整数矩阵[dim][dim];
初始化(dim和矩阵);
返回0;
}
int init(int n,int*arr[][n]){
int numzero,numOnes;
int零或一;

对于(int row=0;row函数应声明为

void init(int n, int arr[][n]);
(函数的返回类型
int
)意义不大。)

打电话给我

init(dim, matrix);
而不是像这样的语句

*arr[row][col]=zero_or_one;
你必须写作

arr[row][col]=zero_or_one;

在这种情况下,为什么void超过int?为什么int会阻止我的函数working@MattTheWizard函数返回值的含义是什么?它没有意义。因此,请从函数中删除return语句。它并不意味着任何事情。我只是为了自己的缘故才在那里使用它,这样我就可以很容易地看到程序何时结束了。这是有意义的你是对的,我想我并没有想得太深。谢谢you@MattTheWizard我不明白返回值在这种情况下是如何有用的。