Преобразование 1D массива в матрицу - PullRequest
0 голосов
/ 11 июня 2018

У меня есть одномерный массив со следующими значениями:

 10010011

Я хотел бы преобразовать этот одномерный массив в матрицу 2X4 в следующем порядке:

 1001
 0011

Код, который я попробовал, приведен ниже:

#include <stdio.h>
#include <stdlib.h>
#define rows_Matrix 2
#define cols_Matrix 4

void print2DArray(unsigned **arr, int m, int q);

int main()
{
   int k = 0; 
   unsigned Array[8] = { 1, 0, 0, 1, 0, 0, 1,  1};

   //Allocation of Memory. 
   unsigned **Matrix = (unsigned **)malloc(sizeof(unsigned *)*rows_Matrix); //Rows

   for (int i = 0; i < rows_Matrix; i++) //Rows
   {
       Matrix[i] = (unsigned *)malloc(sizeof(unsigned ) * cols_Matrix); //Columns 
   }

   do
   {
       for (int i = 0; i < rows_Matrix; i++)
       {
           for (int j = 0; j < cols_Matrix; j++)
           {        
               Matrix[i][j] = Array[k];
           }
       }

      k++;

    } while (k < 8);

    print2DArray(Matrix, 2, 4);

    return 0;

}

   void print2DArray(unsigned **arr, int m, int q)
   {
        for (int i = 0; i < m; i++) //Rows
        {
            for (int j = 0; j < q; j++)//Columns
            {
               printf("%d\t", arr[i][j]);
            }
               printf("\n");
        }
       printf("\n");
   } 

Но я получаю ответ:

 1       1       1       1
 1       1       1       1

Я хотел бы знать, почему значения значений назначаются неправильно.Кажется, как я это делаю, я просто копирую первый элемент одномерного массива.

1 Ответ

0 голосов
/ 11 июня 2018

Вы увеличили в неправильном месте.Таким образом, массив [k] указывал на тот же элемент.

#include <stdio.h>
#include <stdlib.h>
#define rows_Matrix 2
#define cols_Matrix 4

void print2DArray(unsigned **arr, int m, int q);

int main()
{
   int k = 0;
   unsigned Array[8] = { 1, 0, 0, 1, 0, 0, 1,  1};

   //Allocation of Memory.
   unsigned **Matrix = (unsigned **)malloc(sizeof(unsigned *)*rows_Matrix); //Rows

   for (int i = 0; i < rows_Matrix; i++) //Rows
   {
       Matrix[i] = (unsigned *)malloc(sizeof(unsigned ) * cols_Matrix); //Columns
   }

   do
   {
       for (int i = 0; i < rows_Matrix; i++)
       {
           for (int j = 0; j < cols_Matrix; j++)
           {

               Matrix[i][j] = Array[k]; 
               k++; //updated
           }

       }


    } while (k < 8);

    print2DArray(Matrix, 2, 4);

    return 0;

}

   void print2DArray(unsigned **arr, int m, int q)
   {
        for (int i = 0; i < m; i++) //Rows
        {
            for (int j = 0; j < q; j++)//Columns
            {
               printf("%d\t", arr[i][j]);
            }
               printf("\n");
        }
       printf("\n");
   }
...