Изменить индексацию массива с помощью указателей - C (СИ)
Формулировка задачи:
Ввыручайте товарищи, на КР по Си задания:
1)Дан массив целых чисел a[6][5][4]. Изменить индексацию массива на a[-2][7][0]
Дан массив целых чисел b[4][7]. Сделать так. чтобы последний элемент был [0][0].
Учитель сказал что в первой задаче надо создавать три указателя и с ними работать, но я облазил пол инета и не нашел подобного, спросил у знакомого он сказал что [-2] вобще не может быть.
нашел в инете чтото похожее:
но как это к трехмерному масиву привязать без понятия.
буду черезвычайно благодарен если кто нибуть подскажет как сделать эти две задачи.
подскажите как изменить индексацию массива на a[-2][7][0]
(чтобы начальный элемент стал [-2][7][0] )
#include
int main()
{ float *q, **b;
int i, j, k, n, m;
scanf("%d %d",&n,&m);
q=(float *)calloc(m,sizeof(float));
/* сейчас указатель q показывает на начало массива */
q[0]=22.3;
q-=5;
/* теперь начальный элемент массива имеет индекс 5, */
/* а конечный элемент индекс n-5 */
q[5]=1.5;
/* сдвиг индекса не приводит к перераспределению */
/* массива в памяти и изменится начальный элемент */
q[6]=2.5; /* - это второй элемент */
q[7]=3.5; /* - это третий элемент */
q+=5;
/* теперь начальный элемент вновь имеет индекс 0, */
}Не по теме:
хм, слово помощью в назваании темы писать нельзя?
написал инициализацию трехмерного массива
#include <stdio.h>
#include <malloc.h>
int main()
{
int x=6,y=5,z=4,i,j,n,zz=0,*ptr;
int ***k=(int***)malloc(x*sizeof(int**));
for(i=0;i<6;i++)
{
k[i]=(int**)malloc(y*sizeof(int*));
for(j=0;j<5;j++)
k[i][j]=(int*)malloc(z*sizeof(int));
}
for(i=0;i<x;i++)
for(j=0;j<y;j++)
for(n=0;n<z;n++){
k[i][j][n]=zz+1;
zz++;}
for(i=0;i<x;i++)
for(j=0;j<y;j++)
for(n=0;n<z;n++)
printf("%3d",k[i][j][n]);
}Решение задачи: «Изменить индексацию массива с помощью указателей»
textual
Листинг программы
array[n] == *(array + n) ;
Объяснение кода листинга программы
В данном коде происходит проверка и изменение индексации массива с использованием указателей. Список действий:
array- это имя массива.n- это переменная, которая используется как индекс для доступа к элементам массива.*(array + n)- это выражение, которое использует оператор разыменования*для преобразования адреса в значение, и оператор сложения+для смещения от начала массива на значение переменнойn.array[n]- это выражение, которое использует оператор доступа к элементу массива[ ], сnв качестве индекса.- Результат выражения
array[n]сравнивается с результатом выражения*(array + n), чтобы убедиться, что они равны. Если они не равны, то индексация массива должна быть изменена. Таким образом, в данном коде происходит проверка и изменение индексации массива с использованием указателей.