7.9.2. Инициализация и присваивание

7.9.2. Инициализация и присваивание

Вспомним, что имя массива без указания индекса элемента интерпретируется как адрес первого элемента. Аналогично имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Например, при вычислении выражения

lexicoCompare;

получается указатель типа

int (*)( const string , const string );

Применение оператора взятия адреса к имени функции также дает указатель того же типа, например lexicoCompare и lexicoCompare. Указатель на функцию инициализируется следующим образом:

int (*pfi)( const string , const string ) = lexicoCompare;

int (*pfi2)( const string , const string ) = lexicoCompare;

Ему можно присвоить значение:

pfi = lexicoCompare;

pfi2 = pfi;

Инициализация и присваивание корректны только тогда, когда список параметров и тип значения, которое возвращает функция, адресованная указателем в левой части операции присваивания, в точности соответствуют списку параметров и типу значения, возвращаемого функцией или указателем в правой части. В противном случае выдается сообщение об ошибке компиляции. Никаких неявных преобразований типов для указателей на функции не производится. Например:

int calc( int, int );

int (*pfi2s)( const string , const string ) = 0;

int (*pfi2i)( int, int ) = 0;

int main() {

pfi2i = calc; // правильно

pri2s = calc; // ошибка: несовпадение типов

pfi2s = pfi2i; // ошибка: несовпадение типов

return 0;

}

Такой указатель можно инициализировать нулем или присвоить ему нулевое значение, в этом случае он не адресует функцию.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Присваивание

Из книги Давайте создадим компилятор! автора Креншоу Джек


R.18.3.3 Присваивание указателю this

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.18.3.3 Присваивание указателю this Присваивая определенные значения указателю this, пользователь мог управлять выделением памяти для объекта некоторого класса. В конструкторе до использования членов класса можно было с помощью такого присваивания реализовать свой алгоритм


Присваивание функции результата

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Присваивание функции результата Присваивание функции результата является интересной языковой проблемой, обсуждение которой было начато ранее в данной лекции. Стоит изучить ее подробнее ввиду ее важности и для языков, не использующих ОО-подход.Рассмотрим функцию -


Присваивание (Assignment)

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Присваивание (Assignment) Инструкция присваивания записывается в виде:x := eгде x - сущность, допускающая запись (writable), а e - выражение совместимого типа. Такая сущность может быть:[x]. неконстантным атрибутом включающего класса;[x]. локальной сущностью включающей подпрограммы. Для


11.7.4 Присваивание IP-адресов

Из книги VBA для чайников автора Каммингс Стив

11.7.4 Присваивание IP-адресов Администратор конфигурирует сервер BOOTP для присваивания системам IP-адресов посредством ручного создания таблицы отображения на IP-адрес комбинации типа оборудования и аппаратного адреса клиента. Кодирование типов оборудования определяется


11.9.1 Присваивание IP-адресов

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

11.9.1 Присваивание IP-адресов В DHCP поддерживаются три типа присвоения адресов:? Ручное, когда IP-адрес вводится на сервере и назначается клиенту постоянно? Автоматическое, когда IP-адрес выбирается сервером из пула доступных адресов и назначается клиенту


Присваивание значений

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Присваивание значений Значения переменным присваиваются с помощью обыкновенного знака равенства. Например, чтобы поместить число 3 в переменную с именем intC, напечатайте intC = 3В VBA оператор присваивания представляет собой связанную знаком равенства конструкцию, с


Простое присваивание

Из книги C++ для начинающих автора Липпман Стенли

Простое присваивание Операция простого присваивания обозначается знаком =. Значение правого операнда присваивается левому операнду. Левый операнд должен быть модифицируемым L-выражением. При присваивании выполняются правила преобразования типов, описанные в разделе


Составное присваивание

Из книги Учись программировать (на Ruby) автора Пайн Крис

Составное присваивание Операция составного присваивания состоит из простой операции присваивания, скомбинированной с какой-либо другой бинарной операцией. При составном присваивании вначале выполняется действие, специфицированное бинарной операцией, а затем


4.2. Присваивание значений переменным

Из книги автора

4.2. Присваивание значений переменным =оператор присваивания (пробельные символы до и после оператора -- недопустимы) Не путайте с операторами сравнения = и -eq!Обратите внимание: символ = может использоваться как в качестве оператора присваивания, так и в качестве


6.6.2. Присваивание и обмен

Из книги автора

6.6.2. Присваивание и обмен Что происходит, если мы присваиваем один контейнер другому? Оператор присваивания копирует элементы из контейнера, стоящего справа, в контейнер, стоящий слева от знака равенства. А если эти контейнеры имеют разный размер? Например:// svecl


7.9.2. Инициализация и присваивание

Из книги автора

7.9.2. Инициализация и присваивание Вспомним, что имя массива без указания индекса элемента интерпретируется как адрес первого элемента. Аналогично имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Например, при вычислении


14. Инициализация, присваивание и уничтожение класса

Из книги автора

14. Инициализация, присваивание и уничтожение класса В этой главе мы детально изучим автоматическую инициализацию, присваивание и уничтожение объектов классов в программе. Для поддержки инициализации служит конструктор - определенная проектировщиком функция (возможно,


14.7. Почленное присваивание A

Из книги автора

14.7. Почленное присваивание A Присваивание одному объекту класса значения другого объекта того же класса реализуется почленным присваиванием по умолчанию. От почленной инициализации по умолчанию оно отличается только использованием копирующего оператора присваивания


17.6. Почленная инициализация и присваивание A

Из книги автора

17.6. Почленная инициализация и присваивание A При проектировании класса мы должны позаботиться о том, чтобы почленная инициализация (см. раздел 14.6) и почленное присваивание (см. раздел 14.7) были реализованы правильно и эффективно. Рассмотрим связь этих операций с