Программирование на языке C

Заказать проводка электрики в квартире в Новосибирске и пригороде. Русский электрик.

Динамическое размещение массивов - часть 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, */ /* а значения элементов 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 &lt m; i++) b[i]=(float *)calloc(n,sizeof(float)); /* После распределения памяти начальным элементом */ /* массива будет элемент b[0][0] */ /* Выполним сдвиг индексов так, чтобы начальным */ /* элементом стал элемент b[1][1] */ for (i=0; i &lt m ; i++) --b[i]; b--; /* Теперь присвоим каждому элементу массива сумму его */ /* индексов */ for (i=1; i

В качестве последнего примера рассмотрим динамическое распределение памяти для массива указателей на функции, имеющие один входной параметр типа double и возвращающие значение типа double.

Пример:

#include

#include

double cos(double); double sin(double); double tan(double); int main() { double (*(*masfun))(double); double x=0.5, y; int i; masfun=(double(*(*))(double)) calloc(3,sizeof(double(*(*))(double))); masfun[0]=cos; masfun[1]=sin; masfun[2]=tan; for (i=0; i

[ | | ]

Copyright &copy




Начало  Назад  Вперед



Книжный магазин