创建动态数组并填充随机数的问题

问题描述 投票:-2回答:2

*当我想向Array填充随机数时出现错误。我认为麻烦出在指针上错误在这里'ptr [i] [j] = rand()%40000 +5;'*错误名称:下标值既不是数组,也不是指针,也不是向量]

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

int* create_matrix_fill_random (int satir,int sutun);


int main()
{
    srand(time(NULL));
    printf("Matrix automatically created 3x3");
    int a=3;
    int *matrix = create_matrix_fill_random(a,a);

    return 0;
}

int* create_matrix_fill_random (int row, int col)
{
    int *ptr;
    ptr = malloc(row*col*sizeof(int));
    int i,j;
    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
    //Mistake ^ ^ ^ ^ ^ ^ 
        }
    }
    return ptr;
}
c arrays pointers function-pointers void
2个回答
1
投票

函数内的变量ptr具有类型int *。因此,一次像ptr[i]一样应用下标运算符,您将获得int类型的标量对象,对于该标量对象您可能第二次不应用下标运算符。

如果您的编译器支持可变长度数组,则可以编写

int ( *matrix )[a] = create_matrix_fill_random(a,a);

该函数将看起来像

int ( * create_matrix_fill_random (int row, int col) )[]
{
    int ( *ptr )[col];
    ptr = malloc( sizeof( int[row][col] ) );
    int i,j;
    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
        }
    }
    return ptr;
}

否则,您必须写

int **matrix = create_matrix_fill_random(a,a);

该函数将看起来像

int ** create_matrix_fill_random (int row, int col)
{
    int **ptr;
    ptr = malloc( sizeof( row * sizeof( int * ) );

    int i,j;

    for ( i = 0; i < row; i++ )
    {
        ptr[i] = malloc( col * sizeof( int ) );
    }

    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
        }
    }
    return ptr;
}

1
投票

您有一个三维数组

您可以使用一个索引吗?>

    ptr[i * cols + j]= rand() % 40000 +5;
© www.soinside.com 2019 - 2024. All rights reserved.