初始化动态数组为0?

11
int main()
{
    int arraySize;
    int arrayMain[arraySize-1];
    cout << "\n\nEnter Total Number of Elements in Array.\n\n";
    cin >> arraySize;
    arrayMain[arraySize-1]={0};
    cout <<"\n\n" <<arrayMain;
    return 0;
}

当我编译上述代码时,我的编译器会卡住。 我不知道如何将动态数组设置为0?

3个回答

20

您使用了std::vector

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

您的代码无效,因为1)arraySize未初始化,而且2)在C++中不能有变长数组。因此,请使用 vector 或动态分配内存(这是 std::vector 在内部执行的操作):

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

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


我必须使用整数数组。 - user2086751
std=c++11 怎么样? - Naveen

9
如果你想将整个数组初始化为零,请按照以下方式操作,
int *p = new int[n]{0};

4
我不确定那是否是一个有效的答案。因为它只是将数组的第一个元素初始化为方括号中的值。例如, int *p = new int[n]{1}; 只会将 p[0] 设为 1。 - Ali Ihsan Elmas
这只是将数组的第一个元素初始化为指定的数字。 - shiwang
是的@shiwang,当您想要初始化为0以外的其他值时,您是正确的。但对于0,这将起作用 :) - Jaydip Pansuriya

5
如果必须使用动态数组,您可以使用值初始化(虽然建议使用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 <<"\n\n" <<arrayMain;

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接