我想问一下指针如何帮助用户输入数组。我认为需要常量变量来声明一个数组...... 编程语言是C ++。
答案 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.