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;
}