【发布时间】:2021-01-20 19:07:14
【问题描述】:
所以我正在尝试制作一个 2d 二进制矩阵,该矩阵的大小由标准输入提供,并且为 0 和 1 随机分配了索引,但是,它们不能超过 size/2 个零或一个。
例如
输入 2
可以输出
1 0
0 1
现在我原本打算在 init 中使用参数 int arr[][n] 但这个想法失败了,因为传入矩阵只是导致我的程序在我尝试访问矩阵时进入某种无限循环再次在 main 函数内部。我相信这是因为初始化结束时矩阵的寿命到期了?所以我的问题是为什么我现在正在做的事情会产生以下错误,我该如何解决这个问题?
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;
}
【问题讨论】:
标签: arrays c pointers parameters function-definition