使用初始化程序设置多维数组的所有边界

时间:2014-10-14 13:17:46

标签: c arrays multidimensional-array initialization

为什么不编译?我不想将2放在最后一对括号中。还有其他办法吗?

int ary[][] = {{2, 3}, {5, 7}, {11, 13}};

2 个答案:

答案 0 :(得分:1)

另一种方法:

int ary[] = {2, 3, 5, 7, 11, 13};

现在由您来适当地索引数组。你必须知道每个“行”的元素数量是2,所以只需这样做:

int* get_cell(int* arr, size_t N, size_t x, size_t y)
{
  return &arr[x + N * y];
}

答案 1 :(得分:1)

有一种方法可以在不指定尺寸的情况下使用复合文字:

int* ary[] = {( int[] ){2, 3}, ( int[] ){5, 7}, ( int[] ){11, 13} };

用法保持不变!:

ary[2][1] = 55 ;
printf("%d %d\n" , ary[2][0] , ary[2][1] ) ;

复合文字与数组ary具有相同的范围和生命周期,因此这与使用二维数组非常相似。