Tag: 变长数组

正确分配多维数组

这个问题的目的是提供一个关于如何在C中动态正确分配多维数组的参考。这是一个经常被误解的主题,即使在一些C编程书籍中也很难解释。 因此,即使是经验丰富的C程序员也很难做到正确。 我从编程教师/书籍/教程中了解到,动态分配多维数组的正确方法是使用指针指针。 然而,SO上的几个高代表用户现在告诉我这是错误的和不好的做法。 他们说指针指针不是数组,我实际上并没有分配数组,而且我的代码不必要地慢。 这就是我被教导分配多维数组的方法: #include #include #include int** arr_alloc (size_t x, size_t y) { int** pp = malloc(sizeof(*pp) * x); assert(pp != NULL); for(size_t i=0; i<x; i++) { pp[i] = malloc(sizeof(**pp) * y); assert(pp[i] != NULL); } return pp; } int** arr_fill (int** pp, size_t x, size_t y) { for(size_t i=0; i<x; i++) […]

VLA和操作数大小的副作用

我知道sizeof从不评估其操作数,除非在所述操作数是VLA的特定情况下。 或者,我以为我知道。 void g(int n) { printf(“g(%d)\n”, n); } int main(void) { int i = 12; char arr[i]; // VLA (void)sizeof *(g(1), &arr); // Prints “g(1)” (void)sizeof (g(2), arr); // Prints nothing return 0; } 到底是怎么回事? 以防万一,这是在Coliru上用GCC 5.1编译的。

创建和返回数组的函数会导致问题

我试着编写一个返回像素颜色随机数组的函数,所以当我调用randomPalette(i) ,该函数将创建一个i颜色的随机数组。 以下是我的代码。 它表示random[colors]错误表达式必须具有恒定值。 我不知道为什么。 怎么解决? pixel* randomPalette(int colors){ pixel random[colors] ; int i, x; srand(time(NULL)); //generate a random seed for (i = 0; i < colors; i++){ x = rand() % 256; random[i].r = x; random[i].g = x; random[i].b = x; } return random; }

通过malloc进行VLA和动态内存分配有什么区别?

我很好奇这个: 有什么不同之处: const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF); 和: char Buffer[MAX_BUF];