好吧所以这可能是一个非常简单的问题,我对c ++很陌生,并且正在努力理解大多数事情。我被要求创建一个存储随机数的数组,但用户要定义数组的大小。然后我必须显示数组中的所有数字。我正在努力的是显示阵列的所有元素。目前,我很确定我的阵列部分已经关闭,但我似乎只能显示一个数字。到目前为止,这是我的代码:
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <ctime>
using namespace std;
using std::srand;
using std::rand;
using std::time;
void Display(int *, int);
int main(void)
{
int userSize;
cout << "Please enter the size of the array: ";
cin >> userSize;
int* randArray = new int[userSize];
srand(time(NULL));
for (int i = 0; i < userSize; i++) {
randArray[i] = rand() % 20 + 1;
}
//Disregard the next few lines, I was just testing to see if anything was actually in the array.
/*cout << randArray[0] << endl;
cout << randArray[1] << endl;
cout << randArray[2] << endl;
cout << randArray[19] << endl;*/
Display(randArray, sizeof(randArray) / sizeof(int));
return 0;
delete[] randArray;
}
void Display(int *arrayData, int numElements)
{
for (int counter = 0; counter < numElements; counter++)
{
std::cout << *(arrayData + counter) << std::endl;
}
return;
}
我还应该提一下,老师在删除数组的行之后向我们提供了代码。
这是我必须回答的问题:询问用户要存储在数组中的元素数量。然后,您应该动态分配内存来保存此数组,这将继续以与上一个任务相同的方式使用(使用随机数据填充数组,将数据显示到 屏幕)。
答案 0 :(得分:2)
问题是sizeof
。它给出了参数的类型的大小,而不是后面的大小。您应该将userSize
传递给Display()
。
您还应delete
之前return
数组。 return
后面的代码永远不会被执行。
答案 1 :(得分:2)
sizeof(randArray)
不会告诉您已分配的字节数。相反,它告诉你指针的大小,在你的系统上恰好与整数的大小相同,所以sizeof(randArray) / sizeof(int)
总是返回1。而是在userSize
的函数调用中使用Display
作为第二个参数。
此外,您delete[] randArray
之后的return 0
。这是不正确的; return 0
执行后没有任何内容。你想要它在上面。
此外,请考虑使用std::vector
(除非您需要使用原始指针进行此分配)