尝试使用指针填充数组,以便数组的每个索引都包含其索引。我当前得到的输出是+ 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++;
}
}
答案 0 :(得分:1)
问题1:无法在运行时指定自动数组的长度。必须在编译时知道它。为了创建具有动态长度的数组,可以改用std::vector
。
解释这是一个可变长度数组吗?
您可以在程序的不同执行中输入不同的值。因此,长度会有所不同。仅仅保持不变的价值本身是不够的。数组长度使用的表达式必须是编译时常数表达式。
问题2:"+" + array1[i]
并没有实现您可能认为的那样。
字符串文字是一个字符数组。 array1[i]
是整数。当您使用plus-operator将整数添加到数组时,该数组会衰减为指向数组第一个元素的指针,并且该指针将按操作数给出的数字递增。
因此,"+" + 0
将指针增加零位,因此第一次迭代中打印的字符串为"+"
。 "+" + 1
将指针增加一位。在+字符之后,只有空终止符,因此打印的字符串为空。在那次迭代之后,以后的迭代会使数组溢出,并且程序的行为是不确定的。