1

如何在 main 外部声明一个 int 数组数组,然后在知道要构建的数组数组的长度(如果已知一维)后在 main 内部构建。

例如,如果数组应该是array[numberofargs][2],其中维度2是已知的,但numberofargs在 main 执行之前不知道。

4

3 回答 3

3

一种方法是在文件范围内声明例如一个指针,例如

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;
}
于 2021-04-25T15:40:59.410 回答
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);
}
于 2021-04-25T16:26:13.497 回答
-1
int (*array)[2] = malloc(sizeof(int[numberofargs][2]));

然后当你完成它时:

free(array);
于 2021-04-25T15:34:56.897 回答