创建动态数组并填充随机数的问题
The problem of creating a dynamic array and fill random numbers
*我想给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;
}
函数内的变量 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;
}
你有一个一维数组,所以你只能使用一个索引。
ptr[i * cols + j]= rand() % 40000 +5;
// ^^^^^^^^^^^^^^
*我想给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;
}
函数内的变量 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;
}
你有一个一维数组,所以你只能使用一个索引。
ptr[i * cols + j]= rand() % 40000 +5;
// ^^^^^^^^^^^^^^