1.double数组的两种生成方式
double* doubleArray = new double[4]
double* doubleArray = new double[4] 使用了动态内存分配,也称为在堆上分配内存。在这种情况下,doubleArray 是一个指向 double 类型的指针,它指向了连续的 4 个 double 类型的内存空间。这些内存空间是在运行时动态分配的,在程序执行期间保持有效,直到显式地使用 delete[] 来释放它们。
double a[4];
double a[4]
是使用静态内存分配,在栈上分配内存。在这种情况下,a
是一个包含 4 个 double
元素的数组,它在编译时就分配了固定大小的内存空间。数组 a
的内存在定义时分配,函数返回后会自动释放。
区别和注意事项:
- 动态分配的内存需要手动释放,使用
delete[] doubleArray
来释放内存,否则会导致内存泄漏。 - 静态分配的数组在其作用域结束时会自动释放,不需要显式释放内存。
- 静态分配的数组大小在编译时确定,无法在运行时改变;动态分配的数组大小可以在运行时根据需要进行调整。
- 动态分配的数组可能导致内存管理方面的复杂性,包括防止内存泄漏和悬挂指针等问题,因此应谨慎使用,并确保适时释放内存。
在选择使用 double* doubleArray = new double[4]
还是 double a[4]
时,需要考虑数组的生命周期和用途。如果需要在函数返回后仍然保持数组的有效性,或者需要动态调整数组大小,可以考虑使用动态分配的方式。如果数组的大小是固定的,并且只在局部范围内使用,静态分配的方式更为简单和安全。
2.
double* doubleArray = new double[4];
for (int i = 0; i < 4; i++) {
doubleArray[i] = 0.0;
}
// 将QStringList的前4个元素转换为double并填充到doubleArray
int count = qMin(strList.size(), 4);
for (int i = 0; i < count; i++) {
doubleArray[i] = strList[i].toDouble();
}
1中方法一结果为0.0 方法二正常 不知道原因.