【问题标题】:Dynamic array of array of int in CC中int数组的动态数组
【发布时间】:2021-07-19 03:27:09
【问题描述】:

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

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

【问题讨论】:

  • 在函数之外你不能这样做。
  • 不可能像您提到的那样静态分配数组。您将不得不在 main 中动态分配数组。有多种方法可以做到这一点。请参阅此链接以获取更多信息:geeksforgeeks.org/dynamically-allocate-2d-array-c
  • 我的意思是我想在main里面动态分配数组,但是在main外面声明。
  • 创建具有两端(读和写)的全局管道数组。

标签: c dynamic-memory-allocation multi-dimensional-scaling


【解决方案1】:
int (*array)[2] = malloc(sizeof(int[numberofargs][2]));

然后当你完成它时:

free(array);

【讨论】:

  • 他想在任何函数之外做这个。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    不幸的是,我不知道如何创建一个只知道第二维的数组。您可以执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2018-09-26
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2012-05-09
      • 2010-10-02
      相关资源
      最近更新 更多