Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2020-05-08 | 220 |
5.00
из
|
Заказать работу |
|
|
Модификатор const дает возможность программисту сообщить компилятору о том, что значение указанной переменной не должно изменяться.
Существует четыре способа передать функции указатель:
· изменяемый указатель на изменяемые данные,
· неизменяемый указатель на изменяемые данные,
· изменяемый указатель на неизменяемые данные
· неизменяемый указатель на неизменяемые данные.
Каждая из четырех комбинаций обеспечивает различный уровень привилегий доступа к данным.
Самый высокий уровень доступа предоставляется не-константным указателям на не-константные данные.
Функция convertToUppercase, приведенная на рис. 8, объявляет параметром указатель — не константу на неконстантные данные (char * s). Функция обрабатывает строку s посимвольно, используя арифметические операции над указателем. Если символ находится в диапазоне от а до z, то он преобразуется в соответствующий символ верхнего регистра от А до Z с помощью вычислений, основанных на ASCII-кодах символов; в противном случае символ не изменяется и обрабатывается следующий символ в строке.
/* Преобразование символов нижнего регистра в символы верхнего */
/* регистра с использованием указателя-не константы на данные, */
/* которые могут модифицироваться */
# include < stdio. h >
void convertToUppercase (char *);
main()
{
char string[] = "characters";
printf("The string before conversion is: %s\n", string);
convertToUppercase (string);
printf("The string after conversion is: %s\n", string);
return 0;
}
void convertToUppercase(char *s)
{
while (*s! = '\0') {
if (*s >= 'a' && *s <= ' z')
* s -= 32; /* Преобразование к верхнему регистру */
. ++ s; /* увеличение s для перехода к следующему символу */
}
Вывод на экран
The string before conversion is: characters
The string after conversion is: CHARACTERS
Рис. 8. Преобразование строки к верхнему регистру с использованием не константного указателя на не константные данные
|
Указатель — не константа на данные-константы — это указатель, который может изменяться и ссылаться на любой объект данных соответствующего типа, но элемент данных, на которые он указывает, не может изменяться. Такой указатель мог бы использоваться для передачи массива в качестве аргумента функции, которая обрабатывает каждый элемент массива и при этом не изменяет данные. Например, приведенная на рис. 9 функция printCharacters объявляет параметр s, типа const char *. Объявление читается справа налево, и звучит как «s — указатель на символ-константу». В теле функции для вывода символов строки используется цикл for, который завершается при достижении конца строки. После вывода очередного символа производится увеличение указателя для перехода к следующему символу в строке.
/ * Посимвольный вывод строки, использующий */
/ * не-константный указатель на константные данные * /
#include <stdio.h>
void printCharacters (const char *);
main ()
{ char string [] = "print characters of a string";
printf("The string is:\n");
printCharacters (string);' i';i': putchar (' \n ');
.return 0;
}
void printCharacters (const char *s)
{ for (; * s!= '\0'; s ++) /* цикл не инициализируется */
.. putchar (*s);
}
Вывод на экран
The string is:
print characters of a string
Рис. 9. Посимвольный вывод строки с использованием указателя - не константы на константные данные
Структуры, в отличии от массива всегда передаются по значению, т.е. передается копия всей структуры. Во время выполнения программы это приводит к дополнительным накладным расходам. При передаче структуры в функцию можно использовать указатель на константные данные, чтобы сочетать эффективность вызова по ссылке с уровнем защиты данных, соответствующим вызову по значению. При передаче указателя на структуру функция будет получать только копию адреса структуры. при передаче параметра по значению.
На рис. 10 проиллюстрирована попытка изменения константных данных неконстантного указателя.
|
/* Попытка изменения данных при помощи */
/* неконстантного указателя на данные-константы */
#include <stdio.h>
void f (const int. *);
main ()
{
int y;
f (& y); /* функция f пытается выполнить изменение данных */ return 0; i
void f (const int *x) {
* x = 100; /* нельзя модифицировать объект данных типа const */ }
Вывод на экран
Compiling FIG7_12.C:
Error FIG7_12.C 17: Cannot modify a const object
Warning FIG7_12.C 18: Parameter 'x' is never used
Рис. 10. Попытка изменить данные, используя неконстантный
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!