Visits: 370
Оператор – sizeof()
Этот оператор имеет один параметр, который может быть либо тип, либо сама переменная и возвращает размер в байтах этого типа или объекта:
a = sizeof (char);
В этом примере переменной (а) будет присвоено значение 1 потому, что char однобайтовый тип.
Значение, возвращаемое функцией sizeof, является константой, поэтому всегда определяется до выполнения программы.
Например, массив
static unsigned char txferTxBuff[256]; temp = sizeof (txferTxBuff); // возвращает переменной temp размер массива 256.
а конструкция
temp1 = sizeof (*txferTxBuff); // возвращает размер элемента массива в байтах
Если chat то он всегда будет 8 бит или 1 байт, если int то тут будет зависит от используемого микроконтроллера. Например компилятор XC8 вернет значение 2 байта, а компилятор XC32 вернет значение 4 (байта). Это значит, что один элемент в разных системах занимает разное количество байт. Массив static unsigned int txferTxBuff[256] описанный в программе для PIC32 будет занимать в памяти 1024 байта.
конструкция
temp = sizeof (txferTxBuff) / sizeof (*txferTxBuff);
вычисляет именно размер массива.
Приоритет операторов
При написании сложных выражений с несколькими операндами, мы можем иметь некоторые сомнения, относительно какой операнд вычисляется сначала, а какой позднее. К примеру, в этом выражении:
a = 5 + 7 % 2
Мы может сомневаться, если оно действительно означает:
a = 5 + (7 % 2) // with a result of 6, или a = (5 + 7) % 2 // with a result of 0
Правильный ответ является первым из двух выражений с результатом 6. Существует установленный порядок с приоритетом каждого оператора, а не только арифметики из них (те, чьи предпочтение исходят от математики), но и для всех операторов, которые могут возникнуть в C++. От наиболее низкого приоритета, порядок будет следующим:
Уровень |
Оператор |
Описание |
Группировка |
1 |
:: |
scope | Слева направо |
2 |
() [] . -> ++ — dynamic_cast static_cast reinterpret_cast const_cast typeid |
Postfix | Слева направо |
3 |
++ — ~ ! sizeof new delete |
Унарный (префикс) | Справа налево |
* & |
косвенного обращения и ссылки (указатели) | ||
+ – |
унарный оператор знак | ||
4 |
(type) |
приведение типов | Справа налево |
5 |
.* ->* |
указатель на член | Слева направо |
6 |
* / % |
Мультипликативная | Слева направо |
7 |
+ – |
добавка | Слева направо |
8 |
<< >> |
сдвиг | Слева направо |
9 |
< > <= >= |
реляционные | Слева направо |
10 |
== != |
равенство | Слева направо |
11 |
& |
побитового И | Слева направо |
12 |
^ |
Побитовое исключающее или | Слева направо |
13 |
| |
побитовое OR | Слева направо |
14 |
&& |
Логическое И | Слева направо |
15 |
|| |
Логическое или | Слева направо |
16 |
?: |
Условное | Справа налево |
17 |
= *= /= %= += -= >>= <<= &= ^= |= |
назначение | Справа налево |
18 |
, |
запятая | Слева направо |
Группировка определяет порядок приоритета, в котором операторы вычисляются в дело, что есть несколько операторов одного уровня в выражении.
Это может быть интересно
- Altium Designer first projectVisits: 212 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье Altium Designer my setup system and project structure. Обратите внимание! Библиотека постоянно обновляется, …
- Проект с использованием MCC часть 14Visits: 782 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
- PIC18 – модуль DMAVisits: 1133 Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки …
- I2C MODULE – PIC18F25K42 Device ID Revision = A001Visits: 1045 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …
- REFERENCE CLOCK OUTPUT MODULEVisits: 476 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
- LATINO – открытый проект ch-светомузыкиVisits: 1631 Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была …
- ch-светомузыка и AK4113Visits: 1250 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …
- Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROVisits: 108 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
- ESP8266 применение в проектахVisits: 3496 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
- Analog-to-Digital Converter with Computation Technical BriefVisits: 1208 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …