【问题标题】:c : How to initialize mulitdimensional arrays from other arrays? [closed]c : 如何从其他数组初始化多维数组? [关闭]
【发布时间】:2019-11-12 12:38:03
【问题描述】:

我的 C 代码有问题:

输入:整数数组[16]

(whished)输出:array2[4][4] 所以array2[0][1]-array2[0][3]中的前4个元素

我现在得到了这样的东西,但我不明白为什么它不起作用; 我知道 array[1] = *(array + 1);

如果某人能帮助我,那就太好了。

int write_from_state(int *state[][4])
{
    encryption[0] =  state[0][0];
    encryption[1] =  state[1][0];
    encryption[2] =  state[2][0];
    encryption[3] =  state[3][0];
    encryption[4] =  state[0][1];
    encryption[5] =  state[1][1];
    encryption[6] =  state[2][1];
    encryption[7] =  state[3][1];
    encryption[8] =  state[0][2];
    encryption[9] =  state[1][2];
    encryption[10] = state[2][2];
    encryption[11] = state[3][2];
    encryption[12] = state[0][3];
    encryption[13] = state[1][3];
    encryption[14] = state[2][3];
    encryption[15] = state[3][3];

    return encryption;
}

我得到错误

警告:赋值使指针从整数而不进行强制转换 [-Wint-conversion] 状态[0][0] = msg[0] ;

【问题讨论】:

  • 你确定int *state[][4]这行吗?这一行有 2 个错误。此外,您绝对应该使用循环或memcpy 来复制您的数组。
  • 声明int *state[][4]state 是一个由四个指向int 的指针组成的数组。我想你的意思只是int state[][4]。你也返回int 而不是int *
  • 你可能应该改用循环。
  • 顺便说一句,警告消息与您显示的代码不匹配。提问时,请确保minimal reproducible example 复制了您提出的问题。并且您显示的错误消息是您显示的代码的复制粘贴(完整且完整)。
  • 请注意,在 C 中,“初始化”的含义比“首次赋值”更具体。这更像是“指定一个对象在其存在时所具有的值”,而这不是您的代码正在做的事情。

标签: c arrays multidimensional-array initialization


【解决方案1】:
int *write_from_state(int *dest, int *src, size_t rowLength, size_t nRows)
{
    int *tmp = dest;
    while(nRows--)
    {
        memcpy(tmp, src, sizeof(*src) * rowLength);
        tmp += rowLength;
        src += rowLength;
    }
    return dest;
}

或者只是

memcpy(dest, src, nRows * rowLength * sizoef(*src));

甚至

int *dest = (void)src;

然后dest[x];

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2011-04-03
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多