Как корректно создать указатель на двумерный массив? - C (СИ)
Формулировка задачи:
Т.е. вопрос вот в чем. Можно сделать указатель на массив и в цикле его перебрать. Я делаю это вот так:
Но как быть с двумерным массивом? И хотелось бы выбирать отдельно элементы по 2й группе элементов. Ну, например вот:
- вот эта связка не работает. Но на выходе хотелось бы получить что-то подобное тому что я изобразил. Спасибо за помощь!!
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;
} 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;
}
//*****************************
Объяснение кода листинга программы
- Объявляется константа M равная 5.
- Объявляется одномерный массив Mass размером M и инициализируется нулями.
- Указатель p_Mass указывающий на начало массива Mass, инициализируется значением Mass.
- В цикле для каждого элемента массива Mass, значение этого элемента устанавливается равным i+1.
- Выводится содержимое массива Mass с помощью цикла for и функции std::cout.
- Объявляется двумерный массив Mass2 размером Mx2 и инициализируется нулями.
- Указатель p_Mass2 указывающий на первый столбец двумерного массива Mass2, инициализируется значением Mass2[0].
- В цикле для каждого элемента первого столбца двумерного массива Mass2, значение этого элемента устанавливается равным i+1.
- Выводится содержимое первого столбца двумерного массива Mass2 с помощью цикла for и функции std::cout.
- Объявляется структура XY с полями x и y типа short.
- Объявляется массив структур XY Mass3 размером M и инициализируется нулями.
- Указатель p_Mass3 указывающий на начало массива структур XY Mass3, инициализируется значением Mass3.
- В цикле для каждой структуры XY в массиве Mass3, значения полей x и y устанавливаются равными i+1 и i+10 соответственно.
- Выводится содержимое массива Mass3 с помощью цикла for и функций std::cout.
- Объявляется двумерный массив структур XY Mass4 размером Mx2 и инициализируется нулями.
- Указатель p_Mass4 указывающий на первый столбец двумерного массива структур XY Mass4, инициализируется значением Mass4[0].
- В цикле для каждого элемента первого столбца двумерного массива структур XY Mass4, значения полей x и y устанавливаются равными i+1 и i+20 соответственно.
- Выводится содержимое первого столбца двумерного массива структур XY Mass4 с помощью цикла for и функций std::cout.