Создание и просмотр таблицы двумерного массива в разных функциях на C++
Создал программу просмотра и создания массива в разных функциях Не понимаю как исправить ошибки в передачи массива.
#include <iostream>
#include <Windows.h>
using namespace std;
const int Col = 4;
const int Str = 4;
int Create_T(int Str,int Col])
{
int arr[Str][Col];
for (int i = 0; i < Col; i++) {
for(int j= 0; i<Str;++)
arr[i][j] = rand() % 10;
}
return(arr);
}
int Watch_T(int arr[][])
{
for (int i = 0; i < Col; i++)
{
for (int j = 0; i < Str; ++)
cout << arr[i][j]
}
}
int main()
{
int arr[Str][Col];
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Create_T(int Str,int Col);
Watch_T(int arr[Str][Col]);
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну вот только что буквально спрашивали, можно ли возвращать указатель на локальную переменную... Нельзя!
int Create_T(int Str,int Col])
{
int arr[Str][Col];
....
return(arr);
}
Категорически нельзя! и не получится, кстати - хотя бы потому, что согласно объявлению ваша функция возвращает int, а не массив...
Проще всего так:
int** Create_T(int Str, int Col)
{
int ** arr = new int*[Str];
for (int i = 0; i < Str; i++)
{
arr[i] = new int[Col];
for(int j= 0; j < Col; ++j)
arr[i][j] = rand() % 10;
}
return arr;
}
void Watch_T(int **arr, int Str, int Col)
{
for (int i = 0; i < Str; i++)
{
for (int j = 0; j < Col; ++j)
cout << arr[i][j] << " ";
cout << endl;
}
}
И еще - программист просто обязан быть аккуратным. Просто чтоб не позориться выражениями типа
for (int j = 0; i < Str; ++)
счетчик j, проверка i, ++ вообще ни к чему не относится. Что вы такое пишете?!
А эти вызовы -
Create_T(int Str,int Col);
Watch_T(int arr[Str][Col]);
Вы вообще хоть немного учебник читали? Или следующим будет - "а теперь исправьте все остальное, чтоб я сдать мог"?