Напишем следующую программу, которая использует указатели. Предположим, что значение iNum1 равно 2, а адрес iNum1 — 1000. INum1 будет занимать байты с адресами 1000, 1001, 1002 и 1003. Если значение iNum2 было равно, то переменная iNum2 могла бы занимать ячейки с адресами 1004, 1005, 1006 и 1007. Следовательно, iNumI начинается с адреса 1000, а iNum2 начинается с адреса 1004. Однако, хотя iNumI занимает четыре адреса, в С/С++ адресом iNumI называется адрес 1000, а адресом iNum2 называется адрес 1004. Теперь объявим две переменные как указатели — pNum1 и pNum2. Ваша цель состоит в том, чтобы сохранить число 1000 (адрес iNumI) в pNum1 и число 1004 (адрес iNum2) в pNum2.
Внесите следующие изменения в main(void):
void main(void)
{
int iNum1;
int iNum2;
int iResult;
int* pNum1;
int* pNum2;
iNum1 = 2;
iNum2 = 3;
pNum1 = &iNum1;
pNum2 = &iNum2;
iResult = *pNum1 + *pNum2;
cout << "The result is: ";
cout << iResult << endl;
}
Код, который вы ввели, объявляет три целых переменных:
int iNum1;
int iNum2 ;
int iResult;
Затем объявляются еще две переменные:
int* pNum1;
int* pNum2;
Обратите внимание, что в объявлении использована запись int*. К какому же типу относится переменная pNum1? Можете ли вы сохранить целое значение в pNum1? Нет. В pNum1 вы можете сохранить адрес переменной типа int. Вы должны сохранить в переменной pNum1 число 1000, поскольку 1000 является адресом iNum1. Точно так же вы должны сохранять адрес целого значения и в переменной pNum2. После этого вы присваиваете значения переменным iNum1 и iNum2:
iNum1 = 2;
iNum2 = 2;
Затем вы присваиваете значения переменным pNumI и pNum2:
pNum1 = &iNum1;
pNum2 = &iNum2;
Эти два оператора сохраняют адрес переменной iNum1 в pNum1 и адрес iNum2 в pNum2. Далее вам нужно вычислить результат сложения iNum1 с iNum2. Вы могли бы бы просто написать оператор
iResult = iNum1 + iNum2;
Однако попробуем выполнить вычисления, применив указатели, а не переменные. Например, чтобы вычислить результат сложения iNuml и iNum2, вы пишете следующий оператор:
iResult = *pNum1 + *pNum2;
Когда вы используете указатель с предшествующим символом *, вы извлекаете значение, хранящееся по данному адресу. *pNum1 — это то же, что и *1000, так что программа обращается к значению, хранящемуся по адресу 1000. Поскольку переменная pNum1 была объявлена как int* (а компилятор знает, что целое значение занимает четыре байта памяти), программа обращается к адресам 1000, 1001, 1002 и 1003. Она находит по этим адресам значение 2, так как *pNum1 равно 2. Аналогично, *pNum2 равно 3, поскольку pNum2 равно 1004, а ячейки памяти 1004, 1005, 1006 и 1007 содержат целое со значением. И, наконец, выполняется оператор cout, который выводит на экран значение переменной iResult:
cout << "The result is: " << endl;
cout << iResult;
Сохраните свою работу, выполните компиляцию и компоновку программы. Запустите программу и убедитесь, что значение iResult равно 5 (2+3=5).
Другие работы по теме:
Журнал винити
С 2008 года Научная библиотека дгу выписывает электронную версию реферативных журналов по следующим направлениям
1. 1 Применение биосурфактантов 8
Содержание Введение 7 1 Литературный обзор 8 1.1 Применение биосурфактантов 8 1.2 Классификация биосурфактантов 10 1.3 Физико-химические свойства биосурфактантов 13
Синхронная цифровая иерархия
Содержание Введение Достоинства SDH Скорости SDH Измерение на сетях SDH Тестирование мультиплексорного оборудования Тестирование сети SDH в целом
Биография Крылова И. А.
Крылов Иван Андреевич Русский баснописец, драматург, журналист. Родился Крылов 13 февраля (по старому стилю - 2 февраля) 1769 (по другим сведениям в 1766 или 1768), по преданию - в Москве. Отец служил в драгунском полку, выслужившись из солдат, был председателем магистрата в Твери, умер в 1778, оставив вдову с двумя малолетними детьми.
Функции в С++
Описания Функций. Определения Функций. Передача Параметров. Возврат Значения. Векторные Параметры. Параметры по Умолчанию. Перегрузка Имен Функций. Незаданное Число Параметров. Указатель на Функцию.
Полиморфные Вектора
У вас есть другая возможность - определить ваш векторный и другие вмещающие классы через указатели на объекты некоторого класса.
Динамические структуры данных
Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.
Динамические структуры данных
Создание стека как линейного списка. Использование аналогичного ссылочного типа для организации очереди. Циклически связанный список. Построение сложных структур в динамической памяти. Бинарные (двоичные) деревья. Экран результата и контрольные расчеты.
Работа со структурами в языке программирования Си++
Структура – это объединение одного либо более объектов (переменных, массивов, указателей, других структур). Понятие структурной переменной. Создание массивов структур. Использование вложенных структур в виде элементов массивов person, date, pibm.
Динамические структуры данных: списки
В языках программирования (Pascal, C, др.) существует и другой способ выделения памяти под данные, который называется динамическим. В этом случае память под величины отводится во время выполнения программы.
Альтернативные Интерфейсы
Интерфейс. Реализация. Как Этим Пользоваться. Обработка Ошибок. Обобщенные Классы. Ограниченные Интерфейсы.
Добавление к Классу
Для производного класса можно определить данные и функции дополнительно к тем, которые наследуются из его базового класса. Это дает альтернативную стратегию обеспечить средства связанного списка.
Описание указателей
Указатель — переменная, диапазон значений которой состоит из адресов ячеек памяти специального значения - нулевого адреса; применение указателя для доступа к области с динамическим размещением памяти (кучи); выгоды косвенной инициализации и адресации.
Элементарные методы сортировки
Сущность и порядок реализации простых методов сортировки при составлении программного алгоритма, их классификация и разновидности, отличительные признаки, характерные свойства. Особенности алгоритмов для сортировки файлов записей, содержащих ключи.
Примеры решения задач по программированию
Написание программы вычисления сопротивления электрической цепи, состоящей из двух параллельно и двух последовательно соединенных сопротивлений. Схема машинного алгоритма по условию задачи. Применение операций при написании программ на языке C/C++.
Мультисписки
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Контрольна робота з дисципліни:
Форматирование текста в MicroSoft Word
Краснодарский Государственный Университет Культуры и Искусств Факультет Экономики Управления и Рекламы Дисциплина: Информатика РЕФЕРАТ ТЕМА: "Форматирование текста в MicroSoft Word"
Одномерные и двумерные массивы
Кафедра: Автоматика и информационные технологии ОДНОМЕРНЫЕ И ДВУМЕРНЫЕ МАССИВЫ Содержание 1. Теоретическая часть 1.1 Определение массива 1.2 Расположение в памяти
Программирование на языках высокого уровня 3
Программирование на языках высокого уровня ч2 Лабораторная №1 Задача 1 Составить программу на языке С/С++, содержащую: - объявления и инициализацию указателей на различные типы объектов:
Массивы и указатели в языке программирования Си
Лабораторная работа "Массивы и указатели в языке программирования Си++" Теоретические сведения Цель работы: ознакомиться с основными принципами работы с одномерными и двумерными массивами. Освоить работу с указателями и операциями над указателями.
Форматирование текста в Microsoft Word 2
Математический колледж, г. Москва Реферат «Форматирование текста в Microsoft Word» по предмету: «Информационные технологии» Выполнил: Шацков О.К., группа П-262
Рабочая зона оператора
Человек воспринимает поступающую из окружающей среды информацию с помощью органов зрения, слуха, осязания, вкуса, обоняния, болевых чувствительностей.