@triples67

Как поменять код, чтобы при заполнении двумерного массива распознавалась переменная int и не запрашивало указатель?

using namespace std;

void zxc(const int row, const int col, int arr)
{
	srand(time(NULL));
	for (int f = 0; f < row; f++)
	{
		for (int j = 0; j < col; j++)
			arr[f][j] = rand() % 10;
	}
	
}
void qwe(int arr, const int row, const int col)
{
	
	for (int i = 0; i < col; i++) {
		for (int f = 0; f < row; f++)
			cout << arr[f][i] << "\t";
		cout << endl;
	}
}

int main()
{
	 const int row = 5;
	 const int col = 7;
	int arr[row][col];
	zxc(arr[row][col], row, col);
	qwe(arr[row][col], row, col);

в обоих функциях не распознаётся переменная F (а конкретнее эта "cout << arr[f][i] << "\t";" и эта и "arr[f][j] = rand() % 10;" части кода) пишет следующее:
выражение должно иметь тип указателя на объект, но имеет тип "int"
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
#include <random>
#include <iostream>
using namespace std;

void zxc(int* arr, const int row, const int col)
{

	srand(time(NULL));
	for (int f = 0; f < row; f++)
	{
		for (int j = 0; j < col; j++)
			arr[f* col + j] = rand() % 10;
	}

}

void qwe(int* arr, const int row, const int col)
{

	for (int i = 0; i < col; i++) {
		for (int f = 0; f < row; f++)
			cout << arr[f * col + i] << "\t";
		cout << endl;
	}
}

//qwe и zxc это самые удачные названия для функции, из названия сразу ясно что эти функции делают.

int main()
{
	const int row = 5;
	const int col = 7;
	int arr[row * col];
	zxc(arr, row, col);
	qwe(arr, row, col);
}

программисты C++ таким не занимаются, это больше похоже на C.
вот как выглядит нормальный код на C++:
#include <random>
#include <iostream>
#include <vector>
using namespace std;

void zxc(vector<vector<int>>& arr, const int row, const int col)
{
	srand(time(NULL));
	arr.resize(row);
	for (auto& line : arr)
	{
		line.resize(col);
		for (auto& x: line)
		{
			x = rand() % 10;
		}
	}

}

void qwe(const vector<vector<int>>& arr, const int row, const int col)
{
	for (const auto& line : arr)
	{
		for (const auto& x : line)
		{
			cout << x << "\t";
		}
		cout << endl;
	}
}

int main()
{
	const int row = 5;
	const int col = 7;
	vector<vector<int>> arr;
	zxc(arr, row, col);
	qwe(arr, row, col);
}

простые массивы имеют массу неприятностей, связанных с НЕгибкостью кода. если вы пишете на плюсах, познакомьтесь с векторами.
!!!!!!!!!извиняюсь, предыдущая версия была с ошибками, я отредачил
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Gremlin92
@Gremlin92
Целеустремленный
У тебя в обе функции передаются три числа, а должно (указатель на указатель на целое, целое, целое)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы