指针如何帮助根据用户输入数组?

时间:2014-04-08 17:40:35

标签: c++ arrays pointers

我想问一下指针如何帮助用户输入数组。我认为需要常量变量来声明一个数组...... 编程语言是C ++。

2 个答案:

答案 0 :(得分:4)

C ++不是IDE,您可能有一个使用C ++编译器的IDE。

声明一个数组不需要常量变量,常量变量用于声明一些不会被改变的东西。

数组是由大小定义的,所以我认为你的意思是常数。但是,数组中的字段是可更改的(因此不是常量)。

要回答你的问题,在获取输入时使用数组是不受欢迎的,因为你不知道用户将输入什么,并且假设大小是恒定的。

我的建议是使用std :: vector作为容器来保存和存储不断扩展的数据集

这里有关于数组的更多信息,并声明它们/获取输入:


常量数组的示例:

const std::string days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

非常数数组的示例:

std::string days[5];

从用户获取输入(并将其放在数组的第一个位置(0)内)的示例:

std::cin >> days[0];

使用指针的非常量数组示例(这是一个数组,因为它使用new关键字):

std::string *days;
days = new std::string[5];

使用std :: vector的示例(更好的选择,用于存储数据,不会在大小上保持不变):

 std::vector<std::string> days;
    days.push_back("Monday");

答案 1 :(得分:1)

如果定义在堆栈上分配的原始C类数组,例如:

int arr[10];

然后必须在编译时知道元素计数(在本例中为10)。

如果你仍然想要一个原始的C类数组,但是根据某些用户的输入(在运行时)发生了大小,那么你可以使用new[]

int count;         // Elment count
cin >> count;      // Read from user
assert(count > 0); // Check validity

// Create raw array on the heap at run-time.
// Use a *pointer* to store the address of the beginning of the array.
int* arr = new int[count];

... work with the array ...

// Cleanup the array
delete[] arr;

请注意,在现代 C ++中,最好只使用 std::vector 。在这种情况下,您不需要指针,动态内存分配(以及清理)在std::vector的引擎下发生:

// count read from user input.
// Vector of integers allocated at run-time.
std::vector<int> arr(count);

// ... work with vector ...

// No need to manual cleanup: thank you C++, destructors and RAII.