C++ 函数参数中数组大小使用变量报错:表达式必须包含常数
C++ 函数参数中数组大小使用变量报错:表达式必须包含常数
在 C++ 中,声明数组时,数组的大小必须是一个常数表达式,而不能是变量。这是因为编译器需要在编译时确定数组的大小,以便为其分配内存空间。
如果您在函数参数中使用变量来定义数组的大小,例如:
void Deal_with_P1(vector<unsigned char> array, Data_Dynamic_Benz m_Dynamic_Benz[index]) {}
编译器会报错:'表达式必须包含常数'。这是因为 index 是一个变量,编译器无法在编译时确定它的值,也就无法确定数组 m_Dynamic_Benz 的大小。
解决方法:动态内存分配
要解决这个问题,可以使用动态分配内存的方式来创建一个动态数组。可以使用 new 运算符来在堆上分配内存,并在使用完数组后使用 delete[] 运算符释放内存。
以下是使用动态内存分配解决该问题的示例代码:
void Deal_with_P1(vector<unsigned char> array, Data_Dynamic_Benz* m_Dynamic_Benz, int index) {
m_Dynamic_Benz = new Data_Dynamic_Benz[index]; // 动态分配内存
// 在这里使用动态数组 m_Dynamic_Benz
delete[] m_Dynamic_Benz; // 使用完后释放内存
}
在这个示例代码中:
- 我们将函数参数
m_Dynamic_Benz的类型更改为Data_Dynamic_Benz*,即指向Data_Dynamic_Benz类型的指针。 - 在函数内部,我们使用
new Data_Dynamic_Benz[index]动态分配一块可以容纳index个Data_Dynamic_Benz对象的内存空间,并将分配的内存地址赋值给指针m_Dynamic_Benz。 - 现在可以使用
m_Dynamic_Benz指针像使用普通数组一样访问动态分配的内存空间。 - 最后,使用
delete[] m_Dynamic_Benz;释放之前动态分配的内存,防止内存泄漏。
需要注意的是:
- 使用动态内存分配时,需要手动管理内存的分配和释放。务必在使用完动态分配的内存后及时释放,否则可能会导致内存泄漏。
- 在函数参数中传递数组大小时,需要将数组大小作为单独的参数传递,因为无法通过指针获取动态分配数组的大小。
原文地址: https://www.cveoy.top/t/topic/jot8 著作权归作者所有。请勿转载和采集!