Учебное пособие Самара 2015 + 004. 43 Ббк 32. 973 Н 19
Download 1.98 Mb.
|
Lekcii AiSD 2015
Указателе
Назначение и смысл указателей Все программные объекты и структуры данных по их раз- мещению в памяти ЭВМ характеризуются своими адресами. Эти адреса могут (а часто и должны) каким-либо образом использо- ваться в программах, а для этого они должны где-то храниться. Для хранения адресов и используются указатели. Указателе — это переменные, содержащие адреса других переменных или функций, в том числе членов классов (каких- либо программных объектов, например, переменных, массивов, записей, функций). Указатель на функцию содержит адрес точки входа в функцию. Размер памяти, требуемый для хранения адреса и формат этого адреса, зависят от вычислительной платформы и реализации компилятора. В современных системах общего на- значения размер указателя на данные любого типа составляет 4 байта: siz ео f (void*...1onq doublе * ) 4 30 Указатели являются необы чны ми переменными по своему назначения — хранение адресов других переменных, но обы ч- нытп по некоторым своим свойствам , например, выполняемым операциям. Поскольку адреса являются целыми беззнаковыми числами (длинными), то указатели также относятся к простым структурам данных (целочисленным). Так как указатель — это адрес некоторого объекта, то через него можно обращаться к этому объекту. Унарная операция & позволяет получить адрес программного объекта, поэтому опера- тор у &х; присваивает адрес объекта х переменной у. Операцию & можно применять только к объектам, действительно размещенным в па- мяти, конструкции вида &(x+7) 6 2 8 недопустимы. Унарная операция * воспринимает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содер- ЖИМОГО, ПОЭТОМ ОП ]ЭІ1ТО]Э z *у; присваивает переменной z значение, записанное по адресу у. Рассмотрим ситуацию размещения в памяти переменной х:
Адрес х (&х) —> у = &х
Итак, если у = S х и z = * у, то z = х х переменная у — её адрес (указатель) z — содержимое адреса у *у содержимое адреса у Объекты, состоящие из знака * и адреса, необходимо объяв- int *a,*b, *c; Указатели объявляются при помощи символа *. Объявление вида char *d; говорит о том, что значение, записанное по адресу d, имеет тип char. Описатель, записываемый после символа *, может пред- ставлять собой более сложную конструкцию. При этом тип объ- екта, на который «указывает» указатель, определяется совокуп- ностью оставшейся части описателя и спецификатора типа: char *(*(*var) ())[10]; Указатель может указывать на значение, имеющее стан- дартный тип, в том числе перечислимый, а также на структуры, объединения, массивы, функции, объекты классов, члены классов и другие указатели. При определении указателя часто бывает целесообразно вы- полнить его инициализацию. В качестве инициализирующего выражения должно использоваться константное выражение, в ча- явно заданный адрес участка памяти; указатель, уже имеющий значение; выражение, позволяющее получить адрес объекта с помо- щью операции &: int i,*ip = &і; После определения с инициализацией указателя ip доступ к переменной i возможен как с помощью её ишенп i, так и с по— мощью её адреса, являющегося значением указателя ip. Присвоив указателю адрес объекта, можно не только полу- чать, но и изменять содержимое этого объекта. Выражение вида *ip обладает некоторыми правами имени 32
*а = I i // Ошибочное применение Download 1.98 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling