【问题标题】:Dynamic arrays of arrays数组的动态数组
【发布时间】:2014-10-14 16:00:35
【问题描述】:

如果我有:

typedef char pos[2]; /*btw I now know no one should do this*/

void someFunction(void) {
    pos *s = malloc(sizeof(pos) * 2);
}

在这种情况下如何工作?它是什么?数组就像指针,除非你在它们上使用 sizeof 你会得到“正确”的大小。所以在这种情况下,以下意味着 s 将指向 sizeof(char)*4 大小的内存?但是 s 的类型是指向指针的指针,这意味着您不能将 s 用作一维数组(或指向 chars 的指针),因为您“仍然需要通过一个级别/层的间接/指针” .还是我错了?

如何使用 s?作为二维数组还是一维数组?

(如果你有兴趣:我需要这个 bc 我想从一个函数返回两个 pos。有没有更好的方法?(尽管修复了这个问题并使用结构体而不是 2 大小的数组来存储位置数据))

【问题讨论】:

    标签: c arrays pointers dynamic-memory-allocation dynamic-arrays


    【解决方案1】:

    这个typedef costruct 就相当于:

    #include <stdio.h>
    
    void someFunction(void) {
        char (*pos)[2];
        pos = malloc(sizeof(*pos) * 2);
    
        pos[0][0] = 1;
    }
    
    int main(void) {
        someFunction();
        return 0;
    }
    

    这意味着pos 是指向char 的二元素数组的指针。您可以像使用固定列大小为 2 的二维数组一样使用。行数由malloc() 调用控制,在您的情况下,它也恰好是两个。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 2023-02-10
      • 2019-08-07
      • 2014-07-21
      • 2011-02-09
      • 2019-11-27
      相关资源
      最近更新 更多