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

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

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

Т.е. вопрос вот в чем. Можно сделать указатель на массив и в цикле его перебрать. Я делаю это вот так:
const int M=5;
int Mass[M]={0};
int *p_Mass=0;
p_Mass = Mass;
 
for (int i = 0; i < M; i++)
{
   Mass[i]=i+1;
}
 
 cout << "One massiv " <<endl;
 for (int i = 0; i<M-1; i++)
 {
    std::cout << *(p_Mass+i) <<std::endl;
 }
Но как быть с двумерным массивом? И хотелось бы выбирать отдельно элементы по 2й группе элементов. Ну, например вот:
 short Mass2[M][2]={0};
 short *p_Mass2[M][2];
 p_Mass2[M][2]= &Mass2[M][2];
 
 for (short i = 0; i < M; i++)
 {
    for (short j = 0; j < 2; j++)
    {
       Mass2[i][j] =(i+1)+((j)*10);
    }
}
 cout << "Two massiv " <<endl;
  for (int i = 0; i < M; i++)
 {
    std::cout << *(p_Mass2[M][0]) <<std::endl;
    std::cout << *(p_Mass2[M][1]) <<std::endl;
 }
- вот эта связка не работает. Но на выходе хотелось бы получить что-то подобное тому что я изобразил. Спасибо за помощь!!

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

textual
Листинг программы
const int M=5;
int Mass[M]={0};
int *p_Mass;
p_Mass = Mass;
 
for (int i = 0; i < M-1; i++)
{
    Mass[i]=i+1;
}
 
cout << "One massiv " <<endl;
for (int i = 0; i<M; i++)
{
    std::cout << p_Mass[i] <<std::endl;
}
//*****************************
 
int Mass2[M][2];
int *p_Mass2;
 
p_Mass2 =Mass2[0];
 
for (int i = 0; i < M-1; i++)
{
    Mass2[i][0]=i+1;
    Mass2[i][1]=i+10;
}
cout << "Two massiv " <<endl;
for (int i = 0; i<M; i++)
{
    std::cout << p_Mass2[0]+i <<std::endl;
    std::cout << p_Mass2[1]+i <<std::endl;
}
 //*****************************
 
 
struct XY {short x,y;};
XY Mass3[M]={0};
XY *p_Mass3;
 
p_Mass3 = Mass3;
 
for (int i = 0; i < M-1; i++)
{
   Mass3[i].x=i+1;
   Mass3[i].y=i+10;
}
cout << "Three massiv " <<endl;
for (int i = 0; i<M; i++)
{
    std::cout << p_Mass3[i].x <<std::endl;
    std::cout << p_Mass3[i].y <<std::endl;
}
 //*****************************
 
XY Mass4[M][2]={0};
XY *p_Mass4;
 
p_Mass4 = Mass4[0];
 
for (int i = 0; i < M-1; i++)
{
   Mass4[i][0].x=i+1;
   Mass4[i][0].y=i+10;
   Mass4[i][1].x=i+2;
   Mass4[i][1].y=i+20;
}
cout << "Four massiv " <<endl;
for (int i = 0; i<M; i++)
{
    std::cout << p_Mass4[0].x+i <<std::endl;
    std::cout << p_Mass4[0].y+i <<std::endl;
    std::cout << p_Mass4[1].x+i <<std::endl;
    std::cout << p_Mass4[1].y+i <<std::endl;
}
 //*****************************

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

  1. Объявляется константа M равная 5.
  2. Объявляется одномерный массив Mass размером M и инициализируется нулями.
  3. Указатель p_Mass указывающий на начало массива Mass, инициализируется значением Mass.
  4. В цикле для каждого элемента массива Mass, значение этого элемента устанавливается равным i+1.
  5. Выводится содержимое массива Mass с помощью цикла for и функции std::cout.
  6. Объявляется двумерный массив Mass2 размером Mx2 и инициализируется нулями.
  7. Указатель p_Mass2 указывающий на первый столбец двумерного массива Mass2, инициализируется значением Mass2[0].
  8. В цикле для каждого элемента первого столбца двумерного массива Mass2, значение этого элемента устанавливается равным i+1.
  9. Выводится содержимое первого столбца двумерного массива Mass2 с помощью цикла for и функции std::cout.
  10. Объявляется структура XY с полями x и y типа short.
  11. Объявляется массив структур XY Mass3 размером M и инициализируется нулями.
  12. Указатель p_Mass3 указывающий на начало массива структур XY Mass3, инициализируется значением Mass3.
  13. В цикле для каждой структуры XY в массиве Mass3, значения полей x и y устанавливаются равными i+1 и i+10 соответственно.
  14. Выводится содержимое массива Mass3 с помощью цикла for и функций std::cout.
  15. Объявляется двумерный массив структур XY Mass4 размером Mx2 и инициализируется нулями.
  16. Указатель p_Mass4 указывающий на первый столбец двумерного массива структур XY Mass4, инициализируется значением Mass4[0].
  17. В цикле для каждого элемента первого столбца двумерного массива структур XY Mass4, значения полей x и y устанавливаются равными i+1 и i+20 соответственно.
  18. Выводится содержимое первого столбца двумерного массива структур XY Mass4 с помощью цикла for и функций std::cout.

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


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

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

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