Это в конечном счете заканчивает тем, что было субъективно. Обсуждение к настоящему времени полезно, но я не думаю, что существует корректный или решающий ответ на это. Много будет зависеть от инструкций по стилю и Ваших потребностей в то время.
, В то время как существуют некоторые различные возможности (действительно ли что-то может быть ПУСТЫМ) с указателем, самым большим практическим различием для выходного параметра является просто синтаксис. Руководство по стилю C++ Google ( https://google.github.io/styleguide/cppguide.html#Reference_Arguments), например, передает под мандат только указатели для выходных параметров и позволяет только ссылки, которые являются константой. Обоснование является одной из удобочитаемости: что-то с синтаксисом значения не должно иметь указателя семантическое значение. Я не предполагаю, что это обязательно правильно или неправильно, но я думаю, что точка здесь - то, что это - вопрос стиля, не правильности.
Если ваш компилятор поддерживает это, заголовок C99
предоставляет типы intptr_t
и uintptr_t
, которые должны быть достаточно большие, чтобы удерживать указатель в вашей системе, но являются целыми числами, поэтому вы можете манипулировать битами. Это не может быть намного более портативным, чем это, если это то, что вы ищете.
Если вам нужно выполнить такого рода манипуляции с указателями, вы можете привести их к intptr_t
и uintptr_t
, оба из которых можно найти в stdint.h
. Они гарантированно будут определены как целочисленный тип, зависящий от платформы, с достаточным количеством бит для хранения указателя.
Там же ptrdiff_t
, если вам нужно что-то для хранения разницы между двумя указателями. ]
Я думаю, вы пытаетесь решить не ту проблему. Настоящая проблема здесь:
Я использую пустоты динамического структура массива, которую я написал, чтобы удерживайте биты.
Не используйте пустые указатели для хранения битов. Используйте указатели void для хранения указателей. Используйте целые числа без знака для хранения битов.