В С++ я полный ноль, начал изучать по нужде буквально сутки назад. Есть проблема. Я создаю динамический массив. Потом мне нужно заполнить массив входными данными. Код заполнения массива решил вынести в отдельную функцию. Зачем - не спрашивайте. И тут проблема. Функция не видит указатель 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];
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся с такой проблемойМне необходимо записать слова в два массива
Имеется поле в структуре с расширением constКак заполнить его извне при создании обьекта (например, конструктор)
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Всем привет! Есть страница где при вводе логина и пароля (верного) должно отобразиться сообщение "вход выполнен" и записать например дату...