Следующая программа преобразует трехмерный массив в массив 1D с помощью указателей. Некоторая ошибка преобразования подходит. Линия, в которой происходит ошибка, содержит оператор присваивания с указателем на указатель на тип int с обеих сторон.Ошибка преобразования из массива 3D в массив 1D
#include<iostream>
using namespace std ;
int main()
{
// REPLACING 3D ARRAY WITH A 2D ARRAY AND THEN INTO A 1D ARRAY USING POINTERS .
int abc [2][2][3] ;
int **p[3][2] ;
int *c[6] ;
// // abc gives address of first element of 3d array ie first 2d array .
// abc является указателем на указатель к типу int.
int i , j ; // * abc represents address of first 1d array of first 2d array .
for (i=0 ; i<=2 ; i++) // *abc +1:address of second 1d array of first 2d
{ // array .
for (j=0 ; j<=1 ; j++)
{
p[i][j] = *(abc+i) + j ; // conversion error comes here.
}
}
for (i=0 ; i<=5 ; i++)
{
for (j=0 ; j<=1 ; j++)
{
c[i] = *p[i][j] ;
}
}
// entering array elements .
for (i=0 ; i<=5 ; i++)
{
cin>>* c[i] ;
}
// required array elements .
for (i=0 ;i<=5 ;i++)
{
cout<<*c[i]<<" "; // 3d array elements are accessed using 1d array
} // of pointers .
}
BTW, ваши массивы 'p' и' c' являются массивами указателей. Это намеренно? –
Чтобы преобразовать многомерные массивы в массив 1d или 2d, мы должны использовать указатели. Это увеличивает скорость, поскольку арифметика указателя часто быстрее, чем индексация массива. – steve
Можете ли вы * доказать *, что арифметика указателя быстрее, чем индексирование массива? Многие инструкции процессора могут загружать данные с использованием индекса намного быстрее, чем использование арифметики указателя. Некоторые процессоры могут выполнять загрузку из памяти через указатель и смещение в одной инструкции. Я не вижу, как использование указателей происходит быстрее. –