繁体   English   中英

在 C 中使用恒定长度的二维数组作为结构成员

[英]Using a constant-length 2D array as a struct member in C

我正在尝试在 C 中执行以下操作:

  • 在堆栈上创建一个整数的二维数组(编译时已知维度)
  • 将数组分配为结构的成员(在其他地方的回调 function 中使用)

我尝试使用带有二维数组成员或指向二维数组的指针的结构 - 请参见下面的代码。

我可能只使用用 malloc 分配的双指针并有一个双指针结构成员,但我试图避免动态分配(我想了解出了什么问题)。 我也不想复制数组,因为回调 function 可能会改变数据。

#include <stdio.h>

struct numbers_struct {
    int numbers[2][3];
};

struct pointer_to_numbers_struct {
    int (*numbers)[2][3];
}

int main() {
    int numbers[2][3] = { {1,2,3},{4,5,6} };

    /* try to use struct with 2d array member
     * error: array type `int[2][3]` not assignable */
    struct numbers_struct num_struct;
    num_struct.numbers = numbers;

    /* try to use struct with pointer to 2d array member 
     * contains random/invalid data */
    struct pointer_to_numbers_struct ptr_num_struct;
    ptr_num_struct.numbers = &numbers;
}


您不能分配这样的数组,请尝试使用 memcpy:

memcpy(num_struct.numbers, numbers, sizeof numbers);

您可以在struct numbers_struct

struct numbers_struct num_struct = { { {1,2,3},{4,5,6} } };
struct pointer_to_numbers_struct ptr_num_struct = { &num_struct.numbers };

如果您希望结构持久,请将static添加到其定义中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM