#includeint 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, */ /* а значения элементов q[0], q[1], q[2] равны */ /* соответственно 1.5, 2.5, 3.5 */ q+=2; /* теперь начальный элемент имеет индекс -2, */ /* следующий -1, затем 0 и т.д. по порядку */ q[-2]=8.2; q[-1]=4.5; q-=2; /* возвращаем начальную индексацию, три первых */ /* элемента массива q[0], q[1], q[2], имеют */ /* значения 8.2, 4.5, 3.5 */ q--; /* вновь изменим индексацию . */ /* Для освобождения области памяти в которой размещен */ /* массив q используется функция free(q), но поскольку */ /* значение указателя q смещено, то выполнение */ /* функции free(q) приведет к непредсказуемым последствиям. */ /* Для правильного выполнения этой функции */ /* указатель q должен быть возвращен в первоначальное */ /* положение */ free(++q); /* Рассмотрим возможность изменения индексации и */ /* освобождения памяти для двумерного массива */ b=(float **)calloc(m,sizeof(float *)); for (i=0; i < m; i++) b[i]=(float *)calloc(n,sizeof(float)); /* После распределения памяти начальным элементом */ /* массива будет элемент b[0][0] */ /* Выполним сдвиг индексов так, чтобы начальным */ /* элементом стал элемент b[1][1] */ for (i=0; i < m ; i++) --b[i]; b--; /* Теперь присвоим каждому элементу массива сумму его */ /* индексов */ for (i=1; i<=m; i++) for (j="1;" j<="n;" j++) b[i][j]="(float)(i+j);" /* Обратите внимание на начальные значения счетчиков */ /* циклов i и j, он начинаются с 1 а не с 0 */ /* Возвратимся к прежней индексации */ for (i="1;" i<="m;" i++) ++b[i]; b++; /* Выполним освобождение памяти */ for (i="0;" i < m; i++) free(b[i]); free(b); ... ... return 0; }