如何在 main 外部声明一个 int 数组数组,然后在知道要构建的数组数组的长度(如果已知一维)后在 main 内部构建。
例如,如果数组应该是array[numberofargs][2]
,其中维度2
是已知的,但numberofargs
在 main 执行之前不知道。
如何在 main 外部声明一个 int 数组数组,然后在知道要构建的数组数组的长度(如果已知一维)后在 main 内部构建。
例如,如果数组应该是array[numberofargs][2]
,其中维度2
是已知的,但numberofargs
在 main 执行之前不知道。
一种方法是在文件范围内声明例如一个指针,例如
int ( *array )[2] = NULL;
然后在其中一个函数中为数组分配内存。例如
#include <stdlib.h>
int (*array)[2] = NULL;
int main(void)
{
int numberofargs = 5;
array = malloc( sizeof( int[numberofargs][2] ) );
//...
free( array );
return 0;
}
或者以下方式
#include <stdlib.h>
int **array = NULL;
int main(void)
{
int numberofargs = 5;
array = malloc( numberofargs * sizeof( *array ) );
for ( int i = 0; i < numberofargs; i++ )
{
array[i] = malloc( sizeof( *array[i] ) );
}
//...
for ( int i = 0; i < numberofargs; i++ )
{
free( array[i] );
}
free( array );
return 0;
}
不幸的是,我不知道如何创建一个只知道第二维的数组。您可以执行以下操作:
#include <stdlib.h>
#include <stdio.h>
#define SECOND_DIM 2
int *array;
// returns array[x][y]
int foo(int *array, int x, int y) {
return *(array+x*SECOND_DIM+y);
}
int main(int args, char *argv[]) {
if(!argv[0]) return 0;
array = malloc(args*SECOND_DIM*sizeof(int));
for(int i=0;i<args; i++) {
for(int j=0;j<SECOND_DIM; j++)
*(array+(i*SECOND_DIM)+j) = (i+1)*100+j;
}
printf("array[0][0]: %d\n", foo(array,0,0)); // array[0][0]
printf("array[0][1]: %d\n", foo(array,0,1)); // array[0][1]
free(array);
}
int (*array)[2] = malloc(sizeof(int[numberofargs][2]));
然后当你完成它时:
free(array);