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; // 使用完后释放内存
}

在这个示例代码中:

  1. 我们将函数参数 m_Dynamic_Benz 的类型更改为 Data_Dynamic_Benz*,即指向 Data_Dynamic_Benz 类型的指针。
  2. 在函数内部,我们使用 new Data_Dynamic_Benz[index] 动态分配一块可以容纳 indexData_Dynamic_Benz 对象的内存空间,并将分配的内存地址赋值给指针 m_Dynamic_Benz
  3. 现在可以使用 m_Dynamic_Benz 指针像使用普通数组一样访问动态分配的内存空间。
  4. 最后,使用 delete[] m_Dynamic_Benz; 释放之前动态分配的内存,防止内存泄漏。

需要注意的是:

  • 使用动态内存分配时,需要手动管理内存的分配和释放。务必在使用完动态分配的内存后及时释放,否则可能会导致内存泄漏。
  • 在函数参数中传递数组大小时,需要将数组大小作为单独的参数传递,因为无法通过指针获取动态分配数组的大小。
C++ 函数参数中数组大小使用变量报错:表达式必须包含常数

原文地址: https://www.cveoy.top/t/topic/jot8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录