Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
|
из
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. Попытка изменить данные, используя неконстантный
|
|
|
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!