首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用长度恒定的2D数组作为结构成员。

在C中使用长度恒定的2D数组作为结构成员。
EN

Stack Overflow用户
提问于 2021-03-14 16:10:32
回答 2查看 41关注 0票数 1

我试着用C语言做以下工作:

  • 在堆栈
  • 上创建一个2d数组(具有编译时已知的维度),将数组赋值为结构的成员(在其他地方用于回调函数)

我尝试使用一个结构,要么使用2d数组成员,要么使用指向2d数组的指针-参见下面的代码。

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

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-14 16:51:02

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

代码语言:javascript
复制
memcpy(num_struct.numbers, numbers, sizeof numbers);
票数 2
EN

Stack Overflow用户

发布于 2021-03-14 22:45:00

您可以在struct numbers_struct的初始化器中初始化数组。

代码语言:javascript
复制
struct numbers_struct num_struct = { { {1,2,3},{4,5,6} } };
struct pointer_to_numbers_struct ptr_num_struct = { &num_struct.numbers };

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66626685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档