В С++ я полный ноль, начал изучать по нужде буквально сутки назад. Есть проблема. Я создаю динамический массив. Потом мне нужно заполнить массив входными данными. Код заполнения массива решил вынести в отдельную функцию. Зачем - не спрашивайте. И тут проблема. Функция не видит указатель arr. Как заставить функцию его видеть? Есть какие-либо варианты, кроме передачи указателя аргументом в функцию?
Код:
#include <iostream>
#include <string>
using namespace std;
//СВАЛКА ПЕРЕМЕННЫХ
void delOZU();
void getArrData();
int* inData = new int(0);
int* arr_ptr = new int;
//-----------------
int main() {
setlocale(0, "");
cin >> *inData;
cout << "Вы ввели число: " << *inData << endl;
int* arr = new int[*inData];
arr_ptr = arr;
cout << "Массиву arr установлен лимит " + *inData << endl;
cout << arr_ptr << endl;
cout << "Введите значения массива по порядку от места 0 до места " + *inData << endl;
getArrData();
delOZU();
return 0;
}
void getArrData() {
int* i = new int(0);
for (*i = 0; *i <= *inData; *i++) {
cin >> *arr_ptr[*i];
}
delete i;
}
void delOZU() {
cout << "\nУдаляем все указатели и освобождаем память!" << endl;
delete inData;
}
Тут несколько опечаток:
Условие в цикле: *i <= *inData -> *i < *inData (иначе вы вылезаете на 1 элемент за границу массива).
Изменение счетчика в цикле: *i++ -> (*i)++ (потому что у ++ приоритет выше).
Доступ к элементу массива: *arr_ptr[*i] -> arr_ptr[*i].
Печать числа: cout << "..." + *inData -> cout << "..." << *inData (в С++ строки нельзя соединять с числами через +).
Но вообще - это несерьезно. Слишком много ненужных указателей и new.
Проще написать так:
#include <iostream>
#include <vector>
std::vector<int> GetArray()
{
int size;
std::cin >> size;
std::vector<int> ret;
for (int i = 0; i < size; i++)
{
int x;
std::cin >> x;
ret.push_back(x);
}
return ret;
}
int main()
{
std::vector<int> vec = GetArray();
for (int x : vec)
std::cout << x << ' ';
std::cout << '\n';
}
Не знаю, точно ли вам нужно именно inData+1 значение, но если считать, что да - то я бы написал такой код:
#include <iostream>
#include <string>
using namespace std;
//СВАЛКА ПЕРЕМЕННЫХ
void getArrData(int* arrptr, int size);
//-----------------
int main() {
setlocale(0, "");
int inData;
cin >> inData;
cout << "Вы ввели число: " << inData << endl;
int* arr = new int[inData + 1];
cout << "Массиву arr установлен лимит " << inData << endl;
cout << "Введите значения массива по порядку от места 0 до места " <<
inData << endl;
getArrData(arr, inData);
cout << "Значения в массиве:\n";
for (int i = 0; i <= inData; i++) {
cout << "Значение элемента " << i << " равно " << arr[i] << endl;
}
delete[]arr;
return 0;
}
void getArrData(int* arr_ptr, int inData) {
for (int i = 0; i <= inData; i++) {
cin >> arr_ptr[i];
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей