我想知道是否可以在同一个结构中将数组的长度设置为另一个给定的值?我希望这个长度是常数,不需要做一个动态数组或类似的东西,类似下面的代码
struct Screen { int x ; int y ; int rows ; int columns ; char screen[rows][columns] ; }
我对基于C的语言非常陌生,这当然是一个非常基础的知识,但嘿,这就是我学习的原因!(请原谅我的英语不好)任何回应都是受欢迎的!
qnzebej01#
这是可能的,但是当你为这个结构分配内存时,你需要指定大小。把数组做得小一点。
struct Screen { int x ; int y ; int rows ; int columns ; char screen[1][1]; }
然后,当您为结构分配内存时,为附加项分配额外的字节。
pScreen = malloc(sizeof(struct Screen) + ??? );
这可能会有点混乱,但如果你需要调整它的大小。
f3temu5u2#
在结构中不允许使用可变长度数组,并且如果有多个维度变化,则不能使用灵活的数组成员。模拟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); }
2条答案
按热度按时间qnzebej01#
这是可能的,但是当你为这个结构分配内存时,你需要指定大小。把数组做得小一点。
然后,当您为结构分配内存时,为附加项分配额外的字节。
这可能会有点混乱,但如果你需要调整它的大小。
f3temu5u2#
在结构中不允许使用可变长度数组,并且如果有多个维度变化,则不能使用灵活的数组成员。
模拟2D数组的最好方法是使用双指针:
并根据需要为它分配空间: