【问题标题】:Trying to create an array of arrays in C试图在 C 中创建一个数组数组
【发布时间】:2012-03-10 11:33:58
【问题描述】:

所以我有一堆布尔数组,我想将它们放入一个数组中以便于访问,但由于某种原因,这并不完全有效。

我的数组如下所示:

boolean l1_000[8] = {1,0,0,0,0,0,0,0};

我声明我的数组数组:

boolean level1[8];

然后我想我可以使用这两个中的任何一个(第一个只是在我将它们设置在大数组上的位置直接声明这些数组):

level1[0] = {1,0,0,0,0,0,0,0};
level1[0] = l1_000;

我也尝试了 level1[8][],但也没有用。那么我在这里做错了什么?我该怎么做?

编辑:所以我设法通过将数组声明为布尔 *level1[8] 来做到这一点,但这仅允许我执行 level1[0] = l1_000。有什么办法可以做到 level1[0] = {1,0,0,0,0,0,0,0}?

【问题讨论】:

    标签: c arrays boolean


    【解决方案1】:

    当你想要存储已经创建的数组而不复制每个元素时,你不能声明一个数组,但是你可以声明一个指针数组:

    boolean* level1[] = {
        l1_000, // the array name decays to a pointer to the first element
        l2_000,
        // etc
    };
    

    【讨论】:

    • 我也刚刚想通了。但是如果我想在同一行创建我的数组,我该怎么做呢?
    • @ChristianA.Strømmen 你必须选择一个或另一个,要么存储已经创建的数组,要么在同一行上创建它们。如果您选择在同一行创建它们,请执行以下操作:boolean level1[][8] = { { 0, 1, 1, 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1 }, /* etc */ };
    【解决方案2】:

    我的C-fu有点弱,但你必须这样做:

    int l1_000[8] = {1,0,0,0,0,0,0,0}; // one row
    int level1[8][8];// 8 high, 8 wide
    memcpy(level1[0], l1_000, sizeof(int)*8); // size of int * number of memory elements
    

    基本上做int variable[] 只会在你初始化它时使用,否则它不会工作。

    也像这样设置数组位置

    level1[0] = l1_000;
    

    不起作用,因为您试图将第一个元素设置为数组。

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多