【问题标题】:C Using a n+1 dimentional array as a n dimention array parameterC 使用 n+1 维数组作为 n 维数组参数
【发布时间】:2016-12-20 17:47:09
【问题描述】:

我的问题是,当你有一个数组tab[a][b][c] 时,你可以使用tab[a] 作为参数array[b][c] 吗?

这是一个例子:

void function(int tab[5][6])
{
    tab[4][3]++;
}

int main()
{
    int tab[9][5][6];
    for (int i=0;i<9;i++)
    {
        function(tab[i]);
    }
    return 0;
}

【问题讨论】:

  • MSVC “让我”,但我不知道它是否严格合法。请注意,由于对未初始化数据的操作tab[4][3]++;,您的使用具有未定义的行为
  • 由于表达式tab[i] 没有将&amp;sizeof_Alignof 运算符应用于数组,因此表达式被转换为指向数组第一个元素的指针。由于function原型中的int tab[5][6]调整为int (*)[6]类型,实参和参数的类型匹配。 唯一的问题是读取@WeatherVane 提到的未初始化值。

标签: c arrays multidimensional-array


【解决方案1】:

当你有一个数组tab[a][b][c],你可以使用tab[a]作为参数array[b][c]吗?

是的


int tab[9][5][6];array 9 of array 5 of array 6 of int 类型。

tab[i]int 的数组 6 的数组 5 的类型 。`

当代码调用function(tab[i]) 时,tab[i] 被转换为第一个元素的地址。在本例中,即&amp;tab[i][0],其类型为pointer to array 6 of int

void function(int tab[5][6]) 的操作与void function(int (*tab)[6]) 相同。 IOWs,该函数需要一个pointer to array 6 of int5 是对编码人员的建议,而不是对编码有用的功能。

很好:函数调用提供了预期的类型。

tab[4][3]++;tab[4][3] 上运行。 4 in 表示使用 int (*tab)[6] 的第 4 个索引元素(从 0 开始)。幸运的是,这没问题,因为调用代码的数组足够大,可以处理索引 4。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-06-22
    • 2011-11-11
    相关资源
    最近更新 更多