ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Адресная арифметикаДля указателей-переменных разрешены некоторые операции: · присваивание; · инкремент или декремент; · сложение или вычитание; · сравнение. Физическое увеличение или уменьшение значения указателя зависит от его типа. Если к указателю, описанному как type *ptr, прибавляется, или отнимается величинаN, то значение ptr изменяется на N*sizeof(type). // Напомню, что sizeof() выдает размер в байтах. Разность двух указателей типа type* - это разность их значений, поделенная на sizeof(type). Пример int *ptr1 = (int*)100,*ptr2=(int*)200; ptr1++; ptr2 - =10; printf(“%d”,ptr2-ptr1); _______________________________ ptr1=102; ptr2=180; ptr2-ptr1=39; Если ptr1 и ptr2 типа long* или float*,то: ptr1=104; ptr2=160; ptr2-ptr1=14 и т. д. Приведем таблицу основных размеров, чтобы можно было выполнять адресные вычисления: Тип Размер в байтах char 1 _______________________________________________________ {unsigned}int 2 {short} _______________________________________________________ {unsigned} long 4 float _______________________________________________________
double 8 Выполнение адресных операций ограничено. Так, сравнение указателей выполняется правильно, если они одного типа и выполнена их привязка к одним и тем же объектам данных, например - к одному и тому же массиву. В сложениях и вычитаниях используются целочисленные или адресные абсолютные выражения. Слева и справа от символа присваивания размещаются указатели (справа может быть адресное выражение) одного типа. Массивы Массивы в Си представлены расположенными подряд ячейками памяти, доступ к которым обеспечивается либо через индексированные переменные, либо спомощьюуказателей. Не нашли, что искали? Воспользуйтесь поиском:
|