c - 数组的动态数组

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

如果我有:

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 大小的数组))

最佳答案

这个typedef 构造相当于:

#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() 调用控制,在您的情况下,它也恰好是两行。

关于c - 数组的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365174/

相关文章:

c - 用 C 中的 fgets 覆盖我的数组

c - 如何将结构初始化为指向结构

c - 在 C 中取消引用包含指针的数组

c 指针和数组指针

c++ - 用 C/C++ 中的值填充 DataGridView ComboBox

c - regcmp 模式 $0 含义

c++ - TUN/TAP 上的 C 编译器错误

java - 购物车 Java 应用程序 (addToCart)

C 指针数组不适用于 memcpy

c++ - 指向数组的指针获取大小 C++