Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
|
из
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-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!