我想知道是否可以将数组的长度设置为同一 struct 中的另一个给定值? 我希望这个长度是恒定的,不需要创建动态数组或类似的东西 类似于下面的代码

struct Screen {
    int x ;
    int y ;
    int rows ;
    int columns ;
    char screen[rows][columns] ;
}

我对基于C的语言非常陌生,这当然是一个非常基础的知识,但嘿,这就是我学习的原因!(也原谅我糟糕的英语) 欢迎任何回复!

推荐答案

struct 中不允许使用可变长度数组,如果有多个维度发生变化,则不能使用灵活的数组成员.

要模拟2D数组,最好的方法是使用双指针:

struct Screen {
    int x ;
    int y ;
    int rows ;
    int columns ;
    char **screen;
};

并根据需要为其分配空间:

struct Screen screen;
screen.rows = 4;
screen.columns = 5;
screen.screen = malloc(screen.rows * sizeof *screen.screen);

int i;
for (i=0; i<screen.rows; i++) {
    screen.screen[i] = malloc(screen.columns * sizeof **screen.screen);
}

C++相关问答推荐

VS代码C/C++扩展intellisense无法检测环境特定函数'

Ebpf内核代码:permission denied:invalid access to map value

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

C:二进制搜索和二进制插入

如何将长字符串转换为较小的缩写,该缩写由第一个字符、最后一个字符和中间的字符数组成?

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

使用双指针动态分配和初始化2D数组

Linux不想运行编译后的文件

如何在ASM中访问C struct 成员

插座打开MacOS组件

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

循环中的静态变量与块中的变量和循环

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

如何在C宏定义中包含双引号?

Dlsym()的手册页解决方法仍然容易出错?

按字典顺序打印具有给定字符的所有可能字符串

将不同类型的指针传递给函数(C)

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

从管道读取数据时丢失