Tag: variable length array

是否有充分的理由说明结构中的指针不允许使用VLA?

这是一种定义Matrix类型的方法 typedef struct { int nr, nc; double *elem; } Matrix; 我想定义一下 typedef struct { int nr, nc; double elem[nr][nc]; } Matrix; 这会很好,因为我不必担心索引。 这就是VLA首先有用的原因,因为它们只能透明地完成索引算法的简单操作。 当然,如果只是因为结构的大小不能很好地定义,上述情况是不可能的。 然后,我仍然会满意: typedef struct { int nr, nc; double (*elem)[nc]; } Matrix; 现在,矩阵数据被存储为指针,就像在非VLA情况下一样。 但算法仍然可以由编译器完成。 该定义仅告诉它是某种指向double数据的指针,其中double精度数以nc为单位排列。 它似乎不允许标准,我想知道为什么,因为通过transtyping很容易做同样的事情。 例如,使用第一个定义(带有double * ),我可以做到 double get(Matrix *a, int i, int j) { int nc = a->nc; […]

我们可以有一个可变长度数组类型的struct元素吗?

我们可以声明一个可变长度的结构元素吗? 条件如下: typedef struct { uint8_t No_Of_Employees; uint8_t Employee_Names[No_Of_Employees][15]; }st_employees;

将可变长度数组声明为C中的全局变量

如何将可变长度数组声明为全局变量? 当在扫描长度之前在函数中声明可变长度数组时,它会编译但不会运行。 它给出了分段错误。 当相同的声明语句转移到扫描语句下方时,它运行正常。 如果我们想要一个全局可用于所有函数的可变长度数组,我们该怎么做? 这里的问题是数组的长度只能通过某些函数进行扫描。

传递可变大小的多维数组

我试图理解将多维数组传递给c中的函数的“最佳实践”(或实际上是任何实践)是什么。 当然这取决于应用程序,因此我们考虑编写一个函数来打印可变大小的2D数组。 特别是,我对如何在下面的代码中编写函数printArry(__, int a, int b)感兴趣。 我省略了第一个参数,因为我不确定应该是什么。 void printArry(_____, int a, int b){ /* what goes here? */ } int main(int argc, char** argv){ int a1=5; int b1=6; int a2=7; int a2=8; int arry1[a1][b1]; int arry2[a2][b2]; /* set values in arrays */ printArry(arry1, a1, b1); printArry(arry2, a2, b2); }

我应该信任哪个编译器?

这将是一个新手问题,但我试图在C语言(而不是C ++ )的小练习中工作,我遇到了一些问题。 假设我想在一个方法中使用一个数组,该方法的大小取决于其中一个参数: void someFunc(int arSize) { char charArray[arSize]; // DO STUFF … } 当我尝试在Visual Studio 2013中将其编译为.c文件时,我收到一条错误消息,指出不允许使用非常量数组。 但是,相同的代码在GNU编译器下的CodeBlocks中工作。 我应该相信哪一个? 编译器的行为是否正常? 我一直认为,如果你正在做一些编译器不喜欢的事情,你不应该首先做它,因为它不是标准。 任何输入都很有用! 我来自Python背景,我试图更多地参与数据结构和算法的编程。 您可以告诉我的平台是Windows。 如果这个问题需要更多信息才能回答,请告诉我。