C、 开关箱中的功能
我试图生成随机矩阵,或者由程序的用户用包含函数的开关盒填充它C、 开关箱中的功能,c,multidimensional-array,malloc,C,Multidimensional Array,Malloc,我试图生成随机矩阵,或者由程序的用户用包含函数的开关盒填充它 #include <stdio.h> #include <stdlib.h> #include <time.h> void randomly(int **matrix, int r, int c) { int i, j; srand(time(NULL)); for(i=0; i<r; i++) { for(j=0; j<c; j++)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void randomly(int **matrix, int r, int c)
{
int i, j;
srand(time(NULL));
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
matrix[r][c] = rand() % 10;
}
}
}
void fill_normal(int **matrix, int r, int c)
{
int i, j;
printf("\nEnter matrix elements :\n");
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf("ENTER FOR --> [%d,%d] : ",i+1,j+1);
scanf("%d",&matrix[i][j]);
}
}
}
void print_matrix(int **matrix, int r, int c)
{
int i, j;
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf("%d\t",matrix[i][j]);
}
printf("\n"); /*new line after row elements*/
}
}
int main()
{
int r, c;
printf("Enter the rows and cols of matrix:\n");
scanf("%d%d", &r,&c);
int **matrix = malloc(r * c * sizeof(int));
int o;
printf("Enter 1 if you want to generate the numbers randomly:\n");
printf("Enter 2 if you want to enter the number by yourself:\n");
scanf("%d",&o);
printf("\n\n\n");
switch(o)
{
case 1:
randomly(matrix,r,c);
print_matrix(matrix,r,c);
break;
case 2:
fill_normal(matrix,r,c);
print_matrix(matrix,r,c);
break;
default:
printf("!!!WRONG OPERATOR!!!");
break;
}
free(matrix);
return 0;
}
#包括
#包括
#包括
随机无效(整数**矩阵、整数r、整数c)
{
int i,j;
srand(时间(空));
对于(i=0;i矩阵
不是真正的2D数组,而是指向指针的指针。因此,它可以指向int*
数组的第一个元素,每个元素都可以指向int
数组的第一个元素
因此,当您使用矩阵[i][j]
时,第一个下标将取消引用int*
数组,第二个下标将取消引用int
数组。但是在引用矩阵[i][j]
之前,您从未将矩阵[i]
设置为有效的指针值,因此您可以得到
与其将矩阵
指向r*c
类型int
值的内存块,它首先需要指向r
类型int*
的元素,然后每个元素都指向c
类型int
的元素:
int i;
int **matrix = malloc(r * sizeof(int *));
for (i=0; i<r; i++) {
matrix[i] = malloc(c * sizeof(int));
}
相反,您希望:
matrix[i][j] = rand() % 10;
矩阵
不是真正的2D数组,而是指向指针的指针。因此,它可以指向int*
数组的第一个元素,每个元素都可以指向int
数组的第一个元素
因此,当您使用矩阵[i][j]
时,第一个下标将取消引用int*
数组,第二个下标将取消引用int
数组。但是在引用矩阵[i][j]
之前,您从未将矩阵[i]
设置为有效的指针值,因此您可以得到
与其将矩阵
指向r*c
类型int
值的内存块,它首先需要指向r
类型int*
的元素,然后每个元素都指向c
类型int
的元素:
int i;
int **matrix = malloc(r * sizeof(int *));
for (i=0; i<r; i++) {
matrix[i] = malloc(c * sizeof(int));
}
相反,您希望:
matrix[i][j] = rand() % 10;
#包括
#包括
#包括
随机无效(无效*矩阵、大小\u t r、大小\u t c)
{
尺寸i,j;
int(*m)[r][c]=矩阵;
srand(时间(空));
对于(i=0;i#包括
#包括
#包括
随机无效(无效*矩阵、大小\u t r、大小\u t c)
{
尺寸i,j;
int(*m)[r][c]=矩阵;
srand(时间(空));
对于(i=0;i更改matrix[r][c]=rand()%10;
到matrix[i][j]=rand()%10;
查看此链接了解2D数组的动态内存分配:更改matrix[r][c]=rand()%10;
到matrix[i][j]=rand()%10;
查看此链接了解2D数组的动态内存分配:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void randomly(void *matrix, size_t r, size_t c)
{
size_t i, j;
int (*m)[r][c] = matrix;
srand(time(NULL));
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
(*m)[i][j] = rand() % 10;
}
}
}
void fill_normal(void *matrix, size_t r, size_t c)
{
size_t i, j;
int (*m)[r][c] = matrix;
printf("\nEnter matrix elements :\n");
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf("ENTER FOR --> [%d,%d] : ",i+1,j+1);
scanf("%d",&(*m)[i][j]);
}
}
}
void print_matrix(void *matrix, size_t r, size_t c)
{
size_t i, j;
int (*m)[r][c] = matrix;
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf("%d\t",(*m)[i][j]);
}
printf("\n"); /*new line after row elements*/
}
}
int main()
{
int r = 7, c = 10;
printf("Enter the rows and cols of matrix:\n");
//scanf("%d%d", &r,&c);
int *matrix = malloc(r * c * sizeof(int));
int o;
printf("Enter 1 if you want to generate the numbers randomly:\n");
printf("Enter 2 if you want to enter the number by yourself:\n");
//scanf("%d",&o);
o = 1;
printf("o = %d\n\n\n", o);
switch(o)
{
case 1:
randomly(matrix,r,c);
print_matrix(matrix,r,c);
break;
case 2:
fill_normal(matrix,r,c);
print_matrix(matrix,r,c);
break;
default:
printf("!!!WRONG OPERATOR!!!");
break;
}
free(matrix);
return 0;
}