Изменить индексацию массива с помощью указателей - C (СИ)

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

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

Ввыручайте товарищи, на КР по Си задания: 1)Дан массив целых чисел a[6][5][4]. Изменить индексацию массива на a[-2][7][0] Дан массив целых чисел b[4][7]. Сделать так. чтобы последний элемент был [0][0]. Учитель сказал что в первой задаче надо создавать три указателя и с ними работать, но я облазил пол инета и не нашел подобного, спросил у знакомого он сказал что [-2] вобще не может быть. нашел в инете чтото похожее:
 #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]);
}
подскажите как изменить индексацию массива на a[-2][7][0] (чтобы начальный элемент стал [-2][7][0] )

Решение задачи: «Изменить индексацию массива с помощью указателей»

textual
Листинг программы
array[n] == *(array + n) ;

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

В данном коде происходит проверка и изменение индексации массива с использованием указателей. Список действий:

  1. array - это имя массива.
  2. n - это переменная, которая используется как индекс для доступа к элементам массива.
  3. *(array + n) - это выражение, которое использует оператор разыменования * для преобразования адреса в значение, и оператор сложения + для смещения от начала массива на значение переменной n.
  4. array[n] - это выражение, которое использует оператор доступа к элементу массива [ ], с n в качестве индекса.
  5. Результат выражения array[n] сравнивается с результатом выражения *(array + n), чтобы убедиться, что они равны. Если они не равны, то индексация массива должна быть изменена. Таким образом, в данном коде происходит проверка и изменение индексации массива с использованием указателей.

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


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

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

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