нужна . С++
Мне нужно превратить (int mat[n][m]) в указатель так чтобі это работало((
#include
#include
#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Ukr");
const int n = 3, m = 3;
printf("Кiлькiсть рядкiв матрицi = ");
scanf_s("%d", &n);
printf("Кiлькiсть стовпцiв матрицi = ");
scanf_s("%d", &m);
int mat[n][m];
srand(time(NULL));
printf("Була:\n ");
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
mat[i][j] = rand() % 21 - 10;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
printf("Cтала:\n ");
for (int i = 0; i < n; i++)
{
int* temp = new int[n];
temp[i] = mat[n - 1][i];
mat[n - 1][i] = mat[i][0];
mat[i][0] = temp[i];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
return 0;
}
Так работать оно никак не будет по 2 причинам
for (int i = 0; i < n; i++)
{
int* temp = new int[n];
temp[i] = mat[n - 1][i];
mat[n - 1][i] = mat[i][0];
mat[i][0] = temp[i];
}
1. у тебя mat[n][m], а ты пытаешься че-то там обратиться к mat[n - 1][i], а i бегает по n. Ты не написал че должна делать прога, потому сам приведи индексы в чувство.
2. ты зачем то создаёшь новый масив temp, не очищаешь память, но ладно это, так ты создаёшь его для хранения 1 значения. mat[x][y] в данном случае вернёт просто int, потому и делай int temp = mat[x][y] или если так нужен указатель, то int* temp =&mat[x][y] , а ещё лучше почитай про std::swap (как я понял, это надо чтоб поменять местами значения 2 элементов)
Объяснение:
С использованием арифметики указателей будет так на чистом С:
В программе, я так понимаю, требовалось поменять 1-ю и последнюю строку в матрице?
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <locale>
#include <new> //для new
using namespace std;
int main()
{
setlocale(LC_ALL, "Ukr");
int n = 3, m = 3;
printf("Кiлькiсть рядкiв матрицi = ");
scanf_s("%d", &n);
printf("Кiлькiсть стовпцiв матрицi = ");
scanf_s("%d", &m);
int** mat;
// Динамічне виділення пам'яті в кучі для матриці
// за до malloc() в стилі С або
// за до new в С++
mat = (int**)malloc(sizeof(int*) * n);
for (int i = 0; i < n; ++i)
*(mat + i) = (int*)malloc(sizeof(int) * m);
srand(time(NULL));
printf("Була:\n");
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
*(*(mat + i) + j) = (int) rand() % 21 - 10;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%5d", *(*(mat + i) + j));
printf("\n");
}
// Переставити 1-й та останній рядок
printf("Cтала:\n");
int* temp = *mat;
*mat = *(mat + n - 1);
*(mat + n - 1) = temp;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%5d", *(*(mat + i) + j));
printf("\n");
}
// Звільнення пам'яті з кучі (якщо було new, то delete)
for (int i = 0; i < n; ++i)
free(*(mat + i));
free(mat);
return 0;
}