рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Связь массивов и указателей

Связь массивов и указателей - раздел Информатика, ИНФОРМАТИКА Каждая Область Памяти, Которую Вы Используете Для Хранения Данных, Имеет Свой...

Каждая область памяти, которую вы используете для хранения данных, имеет свой адрес. Адрес позволяет компьютеру обращаться к определенному элементу данных.

Указатель – это переменная, которая хранит адрес другой переменной определенного типа. Фактически это просто адрес одного байта оперативной памяти, с которого начинается размещение этой переменной. Переменная указатель, как и любая другая переменная, обладает именем, а также имеет тип, определяющий то, на какого рода данные она может указывать. При помощи указателей удобно выполнить многие действия:

· получить доступ к содержимому любой ячейки памяти;

· создать новые объекты (переменные, массивы, структуры и т. п.) в процессе выполнения программы путем динамического резервирования памяти;

· облегчить передачу фактических параметров функциям, передавая не сам объект (который может быть довольно большим), а только его начальный адрес.

Как и любая переменная, каждый указатель должен быть описан и инициализирован перед использованием.

Чтобы объявить указатель, нужно выбрать для него имя, перед которым поставить звездочку, а перед звездочкой записать тип переменной или объекта, чей адрес будет храниться в указателе.

Приведем примеры объявления простейших указателей:

int *p1; – указатель на целое;

char *p2; – указатель на символ;

double *p3; – указатель на вещественную переменную

двойной точности.

Особенностью языка С++ является тот факт, что имя одномерного массива (без индексов и квадратных скобок!) можно рассматривать как переменную, всегда хранящую адрес начала массива, т. е. как неизменяемыйуказатель на первый байт участка памяти, выделенного под массив. Ему невозможно присвоить другой адрес, но продублировать этот адрес в другой указатель удобно и выгодно:

int first[] = {3, 7, 4, 0, 25}; /* Объявляем массив целых */

nt *pt; /* Вводим указатель на целое */

pt = first; /* Заносим в указатель адрес начала массива */

Занесение адреса в указатель можно было реализовать и по-другому:

pt = &first[0];

Учтите, что операцию взятия адреса нельзя применять к имени массива, поскольку оно уже адекватно адресу начала массива:

pt = &first; /* Так писать нельзя ! */

Может возникнуть вполне законный вопрос – зачем произведено дублирование адреса? Ведь теперь first и pt адресуют один и тот же байт памяти. Однако имя массива по определению – это неизменяемый указатель, а указатель pt можно изменять, т. е. допустимо изменять адрес, который он содержит. Тем самым мы можем "сдвинуть" указатель так, чтобы он стал указывать на нужный элемент массива. Этот "сдвиг" происходит при выполнении над указателями разрешенных арифметических операций.

Арифметические операции над указателями

Над указателями (т. е. адресами) можно производить некоторые целочисленныеарифметические операции. Чаще всего к указателю прибавляют целую константу или вычитают ее из указателя. Очень важно понять, что эти действия выполняются в единицах того типа, который указан при объявлении указателя. Так, если в программе объявлен указатель на целый объект:

int *pt;

и в него занесен некоторый адрес:

pt = first;

то адрес (pt+1) будет отстоять от исходного на размер целой переменной. Если по этому адресу размещена целая величина, то доступ к ней можно получить способом разадресации указателя: *(pt+1). Заметим, что это можно реализовать и по-другому: *(++pt).

Такая запись предписывает сначала увеличить адрес, хранимый в указателе, на sizeof(type) единиц, а затем извлечь операнд, размещенный по новому адресу.

Даже если не введен изменяемый указатель-дублер, то выражение (first+k) также определяет адрес k-го элемента, а выражение *(first+k) – содержимое по данному адресу. Никакого нарушения синтаксиса здесь нет, поскольку указатель-константа, каковым является имя массива, не изменяется, а лишь участвует в выражении на правах слагаемого. Однако записи first++ или *first++ недопустимы.

При желании указатель, которому присвоен адрес начала массива, можно использовать вместо имени массива при обращении к элементу массива по индексу. Так, вполне корректно писать:

int first[] = {....};

int *pt,m;

pt = first;

m = pt[3];

Последний оператор можно записать и иначе:

а) m = first[3];

б) m = *(first+3);

Приведем текст простой программы, создающей одномерный целочисленный массив и заполняющей его первыми числами натурального ряда чисел:

int mas[10], i;

for(i = 0; i < 10; i++)

mas[i] = i;

При обращении к элементам массива через указатель один из возможных вариантов таков:

int mas[10], i, *pt;

pt = mas;

for(i = 0; i < 10; i++)

*pt++ = i;

Конечно, можно обойтись и без указателя pt:

int mas[10], i;

for(i = 0; i < 10; i++)

*(mas+i) = i;

– Конец работы –

Эта тема принадлежит разделу:

ИНФОРМАТИКА

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ... И...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Связь массивов и указателей

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

НОВОСИБИРСК
  2012 УДК 004(076.5) И 741   Составили:

Методические указания
  Редактор Л.Н. Ветчакова Выпускающий редактор И.П. Брованова Компьютерная верстка Л.А. Веселовская ___________________________________

Общие требования и порядок выполнения лабораторных работ
1. Лабораторный практикум по первой части курса «Информатика» состоит из четырех лабораторных работ, каждая из которых рассчитана на четыре академических часа. Состав работ, выполняемых студентом,

РАБОТА В ИНТЕГРИРОВАННОЙ СРЕДЕ VISUAL STUDIO
Прежде чем создавать простейшую программу на C++ в среде Visual Studio , необходимо разобраться со структурой программ в этой среде. Разработчики Visual Studio оперируют такими

Создание проекта и добавление файла исходного кода
1. Создайте новый проект. В меню Файл выберите пункт Создать и щелкните левой кнопкой мыши по Проект...(рис. 1). 2. В списке тип

Исправление ошибок компиляции с помощью интегрированной среды разработки
1. В файле first.cpp удалите точку с запятой в последней строке, как указано ниже: cout<<name<<endl 2. В меню Построение выберите

Контекстное меню редактора кода
Если щелкнуть правой кнопкой мыши на какой-нибудь идентификатор в редакторе (например, на названии функции sqrt()), откроется вот такое контекстное меню:

Панель инструментов
П

Пояснение к работе
В языке С++ понятие оператора трактуется шире, чем в других языках, поскольку не делается существенного различия между оператором и арифметическим выражением. Другими словами, любое арифмети

Комплексные числа
Комплексные числа широко используются в современной радиотехнике для расчета различных схем и устройств по переменному току. Комплексным числом называется выражение вида a + jb, где

Порядок выполнения работы
1. Написать, ввести и отладить программу вычисления переменных a или b в соответствии с вариантом. Предусмотреть вывод исходных данных и результатов на экран монитора. 2. Исп

Понятие массива. Его объявление и инициализация
Массив – это совокупность элементов одного типа, обозначаемых единым именем и размещенных в смежных ячейках памяти. Простейший одномерный массив можно в общем случае объявить так:

Пояснения к работе
Матрицей [A] называется упорядоченная система из n*m величин, расположенных в прямоугольной таблице из m строк и n столбцов. Величины a[i][j] (i

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги