将动态数组初始化为0

initializing a dynamic array to 0?

本文关键字:初始化 数组 动态      更新时间:2023-10-16
int main()
{
    int arraySize;
    int arrayMain[arraySize-1];
    cout << "nnEnter Total Number of Elements in Array.nn";
    cin >> arraySize;
    arrayMain[arraySize-1]={0};
    cout <<"nn" <<arrayMain;
    return 0;
}

当我编译上述代码时,我的编译器会冻结。我很困惑如何将动态数组设置为0?

使用std::vector:

std::vector<int> vec(arraySize-1);

您的代码无效,因为1(arraySize未初始化,2(C++中不能有可变长度数组。因此,要么使用向量,要么动态分配内存(这就是std::vector在内部所做的(:

int* arrayMain = new int[arraySize-1] ();

请注意末尾的(),它用于初始化元素的值,因此数组的元素将设置为0。

如果您想将整个数组初始化为零,请执行此操作,

int *p = new int[n]{0};

如果必须使用动态数组,则可以使用值初始化(尽管建议使用std::vector<int>(:

int* arrayMain = new int[arraySize - 1]();

检查输入操作的结果,以确保变量被分配了正确的值:

if (cin >> arraySize && arraySize > 1) // > 1 to allocate an array with at least
{                                      // one element (unsure why the '-1').
    int* arrayMain = new int[arraySize - 1]();
    // Delete 'arrayMain' when no longer required.
    delete[] arrayMain;
}

注意cout:的使用

cout <<"nn" <<arrayMain;

将打印arrayMain数组的地址,而不是每个单独的元素。要打印每个个体,您需要依次索引每个元素:

for (int i = 0; i < arraySize - 1; i++) std::cout << arrayMain[i] << 'n';