使用指针填充数组

时间:2019-02-25 02:28:09

标签: c++

尝试使用指针填充数组,以便数组的每个索引都包含其索引。我当前得到的输出是+ DD; D; DD。有人可以解释我在这方面出了什么问题吗?谢谢。

#include <iostream> 

using namespace std; 
int main()
{
    int NUMBER_ELEMENTS;
    cout << "Enter number of elements: ";
    cin >> NUMBER_ELEMENTS;
    short array1[NUMBER_ELEMENTS];
    short *arrPtr;
    arrPtr = array1; 
    short i = 0;
    while(i < NUMBER_ELEMENTS)
    {
        *arrPtr = i;
        arrPtr = arrPtr + 1;
        cout << "+" + array1[i];
        i++;
    }

}

1 个答案:

答案 0 :(得分:1)

问题1:无法在运行时指定自动数组的长度。必须在编译时知道它。为了创建具有动态长度的数组,可以改用std::vector

  

解释这是一个可变长度数组吗?

您可以在程序的不同执行中输入不同的值。因此,长度会有所不同。仅仅保持不变的价值本身是不够的。数组长度使用的表达式必须是编译时常数表达式。


问题2:"+" + array1[i]并没有实现您可能认为的那样。

字符串文字是一个字符数组。 array1[i]是整数。当您使用plus-operator将整数添加到数组时,该数组会衰减为指向数组第一个元素的指针,并且该指针将按操作数给出的数字递增。

因此,"+" + 0将指针增加零位,因此第一次迭代中打印的字符串为"+""+" + 1将指针增加一位。在+字符之后,只有空终止符,因此打印的字符串为空。在那次迭代之后,以后的迭代会使数组溢出,并且程序的行为是不确定的。