C中int数组的动态数组
Dynamic array of array of int in C
如果一维已知,如何在main外部声明一个int数组,然后在知道要构建的array数组的长度后在main内部构建。
例如,如果数组应该是 array[numberofargs][2]
,其中维度 2
在执行 main 之前已知,但 numberofargs
未知。
int (*array)[2] = malloc(sizeof(int[numberofargs][2]));
然后当你完成它时:
free(array);
一种方法就是在文件范围内声明一个指针,例如
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);
}
如果一维已知,如何在main外部声明一个int数组,然后在知道要构建的array数组的长度后在main内部构建。
例如,如果数组应该是 array[numberofargs][2]
,其中维度 2
在执行 main 之前已知,但 numberofargs
未知。
int (*array)[2] = malloc(sizeof(int[numberofargs][2]));
然后当你完成它时:
free(array);
一种方法就是在文件范围内声明一个指针,例如
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);
}