Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 103

Задача 8: Размер массива vs указателя

Оглавление

Вы должны понять, почему применение оператора sizeof к имени массива даёт общий размер всех его элементов в байтах, в то время как применение того же оператора к указателю, даже если он указывает на начало этого массива, возвращает лишь размер самого адреса в памяти. Это связано с тем, что имя массива в большинстве контекстов неявно преобразуется в указатель на первый элемент, но при использовании sizeof такое преобразование не происходит – компилятор видит массив как фиксированный блок памяти известного на этапе компиляции размера. Указатель же всегда остаётся просто переменной, хранящей адрес, и его размер определяется разрядностью системы.

Подсказка: вспомните, как язык C++ трактует имя массива в контексте sizeof, и чем принципиально отличается тип int[5] от типа int*. Обратите внимание на то, что sizeof вычисляется на этапе компиляции и зависит от статического типа операнда, а не от его значения во время выполнения.

Ссылки и указатели в C++: от основ к безопасности и современному коду

Подняться наверх