LINUX.ORG.RU

История изменений

Исправление proud_anon, (текущая версия) :

При том, что взяитие адресса — это частный случай арифметики.

Это не имеет смысл с точки зрения логики. Это как сказать, что поскольку яблоки и апельсины складывать нельзя, то брать из ящика яблоки или апельсины тоже нельзя.

Оно просто не имеет смысла, ты не можешь сделать v++, если v это void *, т.к. это подразумевает, что компилятор знает размер того, на что ссылается ссылка.

Но ведь компилятор совершенно точно знает размер значения, на которое ссылается void**. Это sizeof(void*). Он равен sizeof(int*), sizeof(char*) и sizeof(uint32_t*), потому что размер всех указателей (на данные, по крайней мере, в отличие от указателей на функции) должен быть одинаковый.

Поправка. Стандарт в самом деле не гарантирует, что все указатели будут одинакового размера, но основной мой тезис остаётся в силе: указатель на void, в отличие от самого void, должен иметь вполне конкретный размер.

Исправление proud_anon, :

При том, что взяитие адресса — это частный случай арифметики.

Это не имеет смысл с точки зрения логики. Это как сказать, что поскольку яблоки и апельсины складывать нельзя, то брать из ящика яблоки или апельсины тоже нельзя.

Оно просто не имеет смысла, ты не можешь сделать v++, если v это void *, т.к. это подразумевает, что компилятор знает размер того, на что ссылается ссылка.

Но ведь компилятор совершенно точно знает размер значения, на которое ссылается void**. Это sizeof(void*). Он равен sizeof(int*), sizeof(char*) и sizeof(uint32_t*), потому что размер всех указателей (на данные, по крайней мере, в отличие от указателей на функции) должен быть одинаковый.

Исходная версия proud_anon, :

При том, что взяитие адресса — это частный случай арифметики.

Это не имеет смысл с точки зрения логики. Это как сказать, что поскольку яблоки и апельсины складывать нельзя, то брать из ящика яблоки или апельсины тоже нельзя.

Оно просто не имеет смысла, ты не можешь сделать v++, если v это void *, т.к. это подразумевает, что компилятор знает размер того, на что ссылается ссылка.

Но ведь компилятор совершенно точно знает размер значения, на которое ссылается void**. Это sizeof(void*). Он равен sizeof(int*), sizeof(char*) и sizeof(uint32_t*), потому что размер всех указателей должен быть одинаковый.