Указатели
Указатель — это переменная, которая содержит адрес некоторого объекта. Здесь имеется в виду адрес в памяти компьютера. Указатели определяются следующим образом.
С указателями связано два оператора:
Рассмотрим пример кода.
В языке C возможна ситуация когда указатели ссылаются на указатели. Например.
Инициализация указателейПосле того как указатель был объявлен, но до того как ему было присвоено какое либо значение, указатель содержит неизвестное значения. Поэтому попытка использовать указатель до присвоения ему значения является неприятной ошибкой, так как она может нарушить работу программы но и системы. Обычно в таких случаях система, если не зависает, выдаёт сообщение: "Null pointer assignement". Принято считать, что указатель, который указывает в никуда должен иметь значение null или 0. Операции над указателямиКроме операций присваивания над указателями можно производить операции сложения и вычитания, но они имеют свои специфические особенности. Рассмотрим следующий код.
Над указателем можно применять основные операции сравнения. Например p < g означает что адрес находящийся в p меньше адреса находящегося в g Общая формула для вычисления значения указателя после выполнения операции сложения следующая: p = p+n*количество_байт_памяти_базового_типа_указателя, где p — указатель, n — число, на которое происходит увеличение. Преобразование типов в указателяхЕсли указатель определён одним типом, а переменная, на которую он будет указывать другого типа то необходимо, перед присваиванием адреса, обязательно выполнять преобразование типов.
Тип void и указателиНельзя создавать переменную типа void, но можно создавать указатель на тип void. Указателю на void можно присвоить указатель любого другого типа. Однако при обратном присваивании необходимо использовать явное преобразование указателя на void.
Массивы и указателиВ языке C существует связь между указателями и массивами. Имя массива — это адрес памяти, с которого расположен массив, т.е. адрес первого элемента массива. Например.
Арифметические операции над указателями выполняются быстрее, чем над массивами, если мы работаем с подряд идущими элементами. Например, в следующих двух идентичных записях, где происходит ссылка на 6-й элемент массива, второй вариант предпочтительнее.
Для динамического выделения памяти, во время работы программы, под массив используется оператор new, например.
Строки и указателиСтрочная константа в языке C ассоциируется с адресом начала строки в памяти, тип строки получается char* (указатель на тип char). Поэтому возможно, активно использовать следующее присваивание.
Строки заканчиваются нулевым значением (0) ,поэтому следующий пример напечатает всю строку по символу.
|
Нет комментариев. Оставить комментарий: |