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