Основные правила инициализации. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные правила инициализации.



Инициализация неавтоматической переменной осуществляется только один раз - перед тем, как программа начнет выполняться, при этом начальное значение должно быть константным выражением. Явно инициализируемая автоматическая переменная получает начальное значение каждый раз при входе в функцию или блок, ее начальным значением может быть любое выражение. Внешние и статические переменные по умолчанию получают нулевые значения. Автоматические переменные, явным образом не инициализированные, содержат неопределенные значения ("мусор").

Адресная арифметика.

Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2.

Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно

манипулировать этим объектом. Обычно указатели используются для работы с

динамически созданными объектами, для построения связанных структур данных, таких,

как связанные списки и иерархические деревья, и для передачи в функции больших

объектов – массивов и объектов классов – в качестве параметров.

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

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

типа указатель, и диапазон значений у них одинаков5. Разница состоит в том, как

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

одно и то же значение, но область памяти, где размещаются соответствующие типы,

может быть различной:

• указатель на int, содержащий значение адреса 1000, направлен на область

памяти 1000-1003 (в 32-битной системе);

• указатель на double, содержащий значение адреса 1000, направлен на область

памяти 1000-1007 (в 32-битной системе).

Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем

результат типа int*

 

 

Данные типа указатель и работа с ними.

Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2.

Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно

манипулировать этим объектом. Обычно указатели используются для работы с

динамически созданными объектами, для построения связанных структур данных, таких,

как связанные списки и иерархические деревья, и для передачи в функции больших

объектов – массивов и объектов классов – в качестве параметров.

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

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

типа указатель, и диапазон значений у них одинаков5. Разница состоит в том, как

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

одно и то же значение, но область памяти, где размещаются соответствующие типы,

может быть различной:

• указатель на int, содержащий значение адреса 1000, направлен на область

памяти 1000-1003 (в 32-битной системе);

• указатель на double, содержащий значение адреса 1000, направлен на область

памяти 1000-1007 (в 32-битной системе).

Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем

результат типа int*

Указатели и функции.

Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2.

Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно

манипулировать этим объектом. Обычно указатели используются для работы с

динамически созданными объектами, для построения связанных структур данных, таких,

как связанные списки и иерархические деревья, и для передачи в функции больших

объектов – массивов и объектов классов – в качестве параметров.

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

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

типа указатель, и диапазон значений у них одинаков5. Разница состоит в том, как

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

одно и то же значение, но область памяти, где размещаются соответствующие типы,

может быть различной:

• указатель на int, содержащий значение адреса 1000, направлен на область

памяти 1000-1003 (в 32-битной системе);

• указатель на double, содержащий значение адреса 1000, направлен на область

памяти 1000-1007 (в 32-битной системе).

Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем

результат типа int*

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

Указатели и массивы. Массивы указателей.

Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно

манипулировать этим объектом. Обычно указатели используются для работы с

динамически созданными объектами, для построения связанных структур данных, таких,

как связанные списки и иерархические деревья, и для передачи в функции больших

объектов – массивов и объектов классов – в качестве параметров.

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

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

типа указатель, и диапазон значений у них одинаков5. Разница состоит в том, как

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

одно и то же значение, но область памяти, где размещаются соответствующие типы,

может быть различной:

• указатель на int, содержащий значение адреса 1000, направлен на область

памяти 1000-1003 (в 32-битной системе);

• указатель на double, содержащий значение адреса 1000, направлен на область

памяти 1000-1007 (в 32-битной системе).

Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем

результат типа int*

В языке СИ между указателями и массивами существует тесная связь. Например, когда объявляется массив в виде int array[25], то этим определяется не только выделение памяти для двадцати пяти элементов массива, но и для указателя с именем array, значение которого равно адресу первого по счету (нулевого) элемента массива, т.е. сам массив остается безымянным, а доступ к элементам массива осуществляется через указатель с именем array. С точки зрения синтаксиса языка указатель arrey является константой, значение которой можно использовать в выражениях, но изменить это значение нельзя.

Указатели на многомерные массивы в языке СИ - это массивы массивов, т.е. такие массивы, элементами которых являются массивы. При объявлении таких массивов в памяти компьютера создается несколько различных объектов. Например при выполнении объявления двумерного массива int arr2[4][3] в памяти выделяется участок для хранения значения переменной arr, которая является указателем на массив из четырех указателей. Для этого массива из четырех указателей тоже выделяется память. Каждый из этих четырех указателей содержит адрес массива из трех элементов типа int, и, следовательно, в памяти компьютера выделяется четыре участка для хранения четырех массивов чисел типа int, каждый из которых состоит из трех элементов.

Над указателями можно выполнять унарные операции: инкремент и декремент. При выполнении операций ++ и -- значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель. В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного.



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 185; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.51.241 (0.011 с.)