Как правильно передавать динамический двухмерный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <math.h>
int main(int argc, char argv[])
{
    setlocale(LC_ALL,"Russian");
    int vuvod(int a,int **);
    int zadanie(int a);
    int zadanie2(int a);
    srand(time(NULL));
    const int n=100;
    int i,j,a,v;
    int mas[100][100];
    int **mas;
    //создание динамического массива
    printf("Введите размерность матрици:");
    mas = (int **)malloc(sizeof(int*)*a);
    for (int i = 0; i < a;i++) {
        mas[i] = (int*)malloc(sizeof(int)*a);
    }
    scanf("%d",&a);
    //заполнение массива
    for(i=0;i<=a-1;i++)
    {
        for(j=0;j<=a-1;j++)
          {
            mas[i][j]=rand()%99;
          }
    }
    printf("Исходная матрица\n");
    vuvod(a,&mas);
    printf("Введите номер задания которое нужно виполнить:1 или 2?");
    scanf("%d",&v);
    if (v==1)
    {zadanie(a);}
    if (v==2)
    {zadanie2(a);}
    printf("Матрица после перестановики\n");
    vuvod(a);
    getch();
    return 0;
}
//вивод массив на екран
int vuvod(int a,int ** mas)
{
    int i,j;
 for(i=0;i<=a-1;i++)
    {
        for(j=0;j<=a-1;j++)
         {
           printf("%3d",mas[i][j]);
         }
        printf("\n");
    }
 return 0;
}
//виполнения 1 задания
int zadanie (int a)
{
 int i,j,x;
 for (i=0;i<=a-2;i++)
 {
     for (j=0;j<=a-1-i;j++)
     {
     x=mas[i][j];
     mas[i][j]=mas[a-1-j][a-1-i];
     mas[a-1-j][a-1-i]=x;
     }
 }
return 0;
}
//виполнения 2-задания
int zadanie2(int a)
{
    int i,j,x;
 
if(a%2==0)
{
    for (i=0;i<=a/2-1;i++)
    {
      for(j=0;j<=a/2-1;j++)
      {
       x=mas[i][j];
       mas[i][j]=mas[i][(a/2)+j];
       mas[i][(a/2)+j]=x;
      }
    }
    for (i=0;i<=a/2-1;i++)
    {
     for(j=0;j<=a/2-1;j++) 
     {
     x=mas[i][j];
     mas[i][j]=mas[(a/2)+i][(a/2)+j];
     mas[(a/2)+i][(a/2)+j]=x;
     }
    }
    for(i = 0;i <=a/2; i++)
    {
      for(j = 0;j <=a/2 ;j++)
      {
       x = mas[i][j];
       mas[i][j] = mas[(a/2)+i][j];
       mas[(a/2)+i][j] = x;
      }
    }
}
else printf("Матрица должна быть размерности кратной 2!");
return 0;
}
Вот не могу правильно передать 2 мерный массив в функции как это правильно сделать помогите пожалуйста.

Решение задачи: «Как правильно передавать динамический двухмерный массив»

textual
Листинг программы
int **mas = (int **)malloc(m*sizeof(int));
    for(int i = 0; i < m; i++){
        mas[i] = (int *)malloc(n*sizeof(int));
    }

Объяснение кода листинга программы

  1. Создается двумерный массив типа int **mas с помощью оператора malloc.
  2. В цикле for происходит выделение памяти под каждый элемент массива mas[i] с помощью оператора malloc.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы