变长数组和动态内存分配都是在程序运行时动态分配内存,但它们有一些不同之处。
void func(int n) {
int arr[n];
// do something with arr
}
int* arr = (int*)malloc(sizeof(int) * n);
// do something with arr
free(arr);
总之,变长数组可以更方便地声明和使用,但需要注意栈溢出问题;而动态内存分配可以更精确地分配内存空间,并且可以手动释放,但需要手动管理内存空间的生命周期。