【问题标题】:How do I assign an array element in a 2D array to a variable?如何将二维数组中的数组元素分配给变量?
【发布时间】:2021-12-22 13:04:21
【问题描述】:
int board[4][8] = {
    {0, 1, 2, 3, 4, 5, 6, 7},
    {1, 2, 3, 4, 5, 6, 7, 8},
    {2, 3, 4, 5, 6, 7, 8, 9},
    {3, 4, 5, 6, 7, 8, 9, 10},
};

int secondRow[8] = board[1]; // <-- error: invalid initializer

for (int i = 0; i < 8; i++) {
    if (someCondition(secondRow[i])) {
        // ...
    }
}

如何将board{1, 2, ..., 7, 8} 数组)中的第二个元素分配给secondRow? 我是否将secondRow 声明为某种指针?如果是这样,我是否仍然可以在下面的循环中以相同的方式使用它(或者我应该如何更改它)?

【问题讨论】:

    标签: arrays c multidimensional-array


    【解决方案1】:

    你不能。您必须复制它或引用它。

    你可能想要后者:

    int * secondRow = board[1];
    
    for (int i = 0; i < 8; i++) {
        if (someCondition(secondRow[i]))
            ...
    }
    

    数组不是 C 和 C++ 中的一等公民。

    【讨论】:

    • int * secondRow = board[1]; 行给出:warning: initialization discards qualifiers from pointer target type
    • @vocusyson 该消息表明您的真实代码与您在问题中发布的不同
    • 谢谢,我有const int board[4][8] = {(但不知何故在问题中忽略了它),因此需要改用const int * secondRow = board[1];
    【解决方案2】:

    也许不是您正在寻找的答案,但如果您已经在 secondRow[i] 中循环,为什么不随时分配值?

    int secondRow[8];
    
    for (int i = 0; i < 8; i++) {
        secondRow[i]=board[1][i]; //Here
        if (someCondition(secondRow[i])) {
            // ...
        }
    }
    

    【讨论】:

    • 当然,但这并不能回答如何首先声明 secondRow
    • 是的,我只是建议您这样做,因为您最初似乎对 Dúthomhas 的回答有疑问。很高兴现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2017-12-12
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多