Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我想在函数中声明一个数组,其大小与main中的数组相同_C++ - Fatal编程技术网

C++ 我想在函数中声明一个数组,其大小与main中的数组相同

C++ 我想在函数中声明一个数组,其大小与main中的数组相同,c++,C++,我想在一个函数中声明一个数组,其大小与main中的数组相同,但在定义左[]数组的部分出现了一个错误。我可以做些什么来获得所需的输出或消除错误 void merge_sort(int * A, const int s) { const int mid = s / 2; int left[mid]; // getting error about mid } int main() { const int SIZE = 9; int arr[SIZE]

我想在一个函数中声明一个数组,其大小与main中的数组相同,但在定义左[]数组的部分出现了一个错误。我可以做些什么来获得所需的输出或消除错误

void merge_sort(int * A, const int s)
{
    const int mid = s / 2;
    int left[mid];  // getting error about mid    
}

int main()
{
    const int SIZE = 9;    
    int arr[SIZE] = {1,2,4,5,1,2,3,3,4};

    merge_sort(arr, SIZE);
}
你的错误在这里:

const int mid = s / 2;
int left[mid]; //getting error on the mid
s/2不是常量,因此不能用于生成数组,因为它需要是编译时常量才能符合标准。有些编译器允许这样做,但正如我所说,这不是标准的。MSVC给出了以下错误表达式,该表达式的计算结果不是常数


顺便说一下,C++中没有注释。

C++在Cuto to C中不支持可变长度数组,即至少一维不是编译时常数的数组。

const int mid = s / 2;
int left[mid];
在您的程序中,s在编译时是未知的,所以mid在编译时是未知的。因此int left[mid]是标准C不支持的可变长度数组++

< C++ >中,您可能会使用一个动态容器,如STD::vector,并预先设置维度,而不是逐个推送值:

std::vector<int> left;
left.resize(s/2);

left[0] = 10;  // access it just like an "old style array"
此问题的一个简单解决方案是将SIZE设置为全局constexpr变量,并使用该变量计算其他常量表达式

#include <iostream>

constexpr size_t SIZE = 9;

void merge_sort(int* A)
{
    constexpr size_t mid = SIZE / 2;

    int left[mid];
}

int main()
{
    int arr[SIZE] = {1,2,4,5,1,2,3,3,4};
    merge_sort(arr);
}
下标运算符[]的工作方式与c样式数组类似,因此arr[0]将允许您访问数组中的第一个元素


但是,如果您希望能够创建具有动态大小的数组,您可以查看其他容器,如std::vector。

如果您提供错误消息,这将非常有用。第二:你是否局限于C或者你可以使用C++吗?我不知道这是什么意思。我能做些什么来达到预期的结果?OP省略了一些单词,但问题很清楚。@LightnessRacesinOrbit抱歉,我的语言分析器失败了,你的似乎更高级了;afaik标准::向量左/2;避免发生2次分配
#include <iostream>

constexpr size_t SIZE = 9;

void merge_sort(int* A)
{
    constexpr size_t mid = SIZE / 2;

    int left[mid];
}

int main()
{
    int arr[SIZE] = {1,2,4,5,1,2,3,3,4};
    merge_sort(arr);
}
#include <iostream>
#include <array>

constexpr size_t SIZE = 9;

void merge_sort(std::array<int, SIZE>& A)
{
    constexpr size_t mid = SIZE / 2;

    std::array<int, mid> left;
}

int main()
{
    std::array<int, SIZE> arr = {1,2,4,5,1,2,3,3,4};
    merge_sort(arr);
    for(auto v : arr) {
        std::cout << v << "\n";
    }
}