КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Указатели и массивы
Вывод значений Определение указателей Признаком указателя при объявлении переменных является символ '*'. Указатели могут быть на любой тип данных и даже на функцию, которая к данным не относится. Пример. char *s, *x; double *t, *p; complex *y; // Тип данных пользователя Задание значений Задать значение указателю можно следующими способами: · p=&l; // Задание адреса объекта программы · t=p; // Присваивание значения другого указателя · p=NULL; // Символическая константа NULL, определенная в //файле stdio.h, используется для задания значения, // не указывающего ни на 1 объект программы · scanf("% p ",&q); // Ввод c клавиатуры. Спецификация p · pt=(double*)0777000; // Ссылка на фиксированный адрес Последние 2 способа используются редко. Используется редко. Пример. printf ("Адрес структуры=% p \n",ptr); // Адрес структуры=FF00 Между указателями и массивами существует тесная связь. Любое действие, выполняемое индексированием массива, может быть реализовано с помощью указателей, причем последний вариант более быстр и объектный код более компактен, однако такая реализация требует навыка и воспринимается хуже. Если имеется определение вида short a[10], то упоминание имени a в про-грамме означает ссылку (адрес) на элемент массива a[0], т.е. на начальный адрес массива. Пусть имеем определение short *pa; тогда запись pa=&a[0] эквивалентна записи pa=a. Над указателями можно производить любые действия, лишь бы они имели смысл. Пример. short a[10], *pa; pa=a; Выражение pa+5 определяет адрес 5 элемента массива a, т.е. это выражение задает смещение в 10 байтов от начала массива; выражение pa+i - адрес i -го элемента массива a. Отсюда следует, что запись *(pa+i) эквивалентна записи *(a+i), а она эквивалентна в свою очередь записи a[ i ]. Аналогично b[ i ][ j ] эквивалентно *(*(b+i)+ j). Вывод. Любое обращение к элементу массива можно записать как ссылку и смещение относительно начального адреса массива. Между использованием массивов и указателей есть следующие отличия: - определение массива вызывает выделение памяти под все элементы массива, а определение указателя – выделение памяти только под него; - имя массива является указателем – константой, т.е. его значение изменить нельзя, а значение указателя можно. Пример. Сортировка массива с помощью индексирования и указателей. void sort(double zap[ ], short n){ double buf; short i, j, min_ind; for (i=0; i<n-1; i++){ buf=zap[ i ]; min_ind=i; for (j=i+1; j<n; j++){ if (buf>zap[ j ]){ buf=zap[ j ]; min_ind=j; } } zap[min_ind]=zap[ i ]; zap[ i ]=buf; } } /* End sort */ void sort(double *zap, short n){ double buf; short i, j, min_ind; for (i=0; i<n-1; i++){ buf=*(zap + i); min_ind=i; for (j=i+1; j<n; j++){ if (buf>*(zap + j)){ buf=*(zap + j); min_ind=j; } } *(zap + min_ind)=*(zap + i); *(zap + i)=buf; } } /* End sort */ Для многомерных массивов запись x[ i ] означает адрес i -го подмассива (сечения). При n=2 запись x[ i ] эквивалентна записи &x[i][0]. Пример применения. double x[10][10]; ................ sort(x[ i ],10); // Обращение к функции сортировки элементов i-й строки
Дата добавления: 2014-12-27; Просмотров: 329; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |