【问题标题】:Put array variable in multidimensional array将数组变量放入多维数组
【发布时间】:2021-03-21 19:40:30
【问题描述】:

我想要以下

int ring1[5] = {1,2,3,4,5};
int ring2[5] = {6,7,8,9,10};
int ring3[5] = {11,12,13,14,15};
int rings[3][5] = {ring1, ring2, ring3};

但我在最后一行得到一个错误:

数组必须用大括号括起来的初始化器进行初始化。

【问题讨论】:

  • 是时候打开关于指针章节的教科书了。
  • 不能通过赋值复制数组。可以使用memcpy 或在循环中逐个元素地复制它们。您可以将 rings 制作成一个指针数组,例如int *rings[3] = {ring1, ring2, ring3}; 但请注意,对 ring1[i] 的任何更改也会更改 rings[0][i],反之亦然。 ring2ring3 也是如此。
  • 这个错误有点误导,你是用C++编译器编译的吗?
  • @IrAM Arduino 是准 C++,所以是的。

标签: c arduino


【解决方案1】:

C 中,数组的名称表示数组的基地址,因此您所有的ring1ring2ring3 都给出了它们的起始元素的地址(即第0 个)。

同样rings也是一个数组(它是一个二维数组)。

我们不能将地址存储在数组中,因为那必须使用指针。

所以我们必须使用下面的方式。

#include <stdio.h>

int main()
{
    int ring1[5] = {1,2,3,4,5};
    int ring2[5] = {6,7,8,9,10};
    int ring3[5] = {11,12,13,14,15};
    //int rings[3][5] = {{ring1}, {ring2}, {ring3}};
    int *rings[3] = {ring1, ring2, ring3};
    
    printf("ring1 = %p and rings[0] =%p\n", ring1, rings[0]);
    printf("ring2 = %p and rings[1] =%p\n", ring1, rings[1]);
    printf("ring3 = %p and rings[2] =%p\n", ring1, rings[2]);

    return 0;
}

【讨论】:

  • 是的,但这会丢失“嵌套”数组的大小信息,以及使用指针的其他问题。一个不太直接但更正确的解决方法是迭代和分配子数组 IMO
猜你喜欢
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多