2010-11-16 2 views
2

Возможные Дубликаты:
Are there are any platforms where pointers to different types have different sizes?
are all data pointers of the same size in one platform?Являются ли указатели одинакового размера?

sizeof(Bucket *) такая же, как sizeof(int *), верно?

BTW, is char arr[]; действует в c90?

+1

Dup of [Есть ли платформы, где указатели на разные типы имеют разные размеры?] (Http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to- различные типы-имеют-различный размер), [Может ли размер указателей варьироваться в зависимости от того, что указало?] (http://stackoverflow.com/questions/1473935/can-the-size-of-pointers-vary- в зависимости от того, на что указывает) – outis

+1

вы должны разделить это на два вопроса, чтобы они могли быть хорошо отвечены отдельно. –

+0

Дубликат [- все указатели данных одного размера на одной платформе?] (http: // stackoverflow. com/questions/1241205/are-all-data-point-of-the-same-size-in-one-platform) –

ответ

2

Оригинальное сообщение:

Да, это верно. Указатели имеют размер .

Но, это неправильно. Я выстрелил слишком быстро! Извини за это. Некоторые «случаи» разных размеров указателей существуют, зависят от платформы и зависят от типа: посмотрите на http://c-faq.com/ptrs/generic.html и http://c-faq.com/null/machexamp.html для примеров или, по крайней мере, общих объяснений. (Большое спасибо @fmark и @paxdiablo, я тоже кое-что узнал). Однако у меня никогда не было ситуации, когда указатели были не одного размера (к счастью, к сожалению?).

+0

BTW, is char arr []; действует в c90? – arr

+0

Это правильно, но размер указателя зависит от платформы –

+2

Действительно? Не могли бы вы привести свой источник для этого утверждения («указатели имеют одинаковый размер»)? Как и в: какой бит стандарта ISO соответствует этому? – paxdiablo

4

Я считаю, что указатели не имеют одинакового размера. Единственное требование состоит в том, что все указатели объектов могут быть сохранены в void *, что при нажатии на void * и обратно они будут одинаковыми и что все указатели функций, если они будут переведены на другой тип указателя функции и обратно, будут одинаковыми , (Указатели функции отливки до void * не гарантированно работают. Извините, если я указал другое.)

На практике, я думаю, что единственный раз, когда вы найдете указатели разного размера, если вы заботитесь о указателях функции-члена C++, или вы работаете над более неясной архитектурой.

В C90 char arr[]; является допустимым способом предварительного объявления глобального массива заданной длины. Обратите внимание, что char arr[] является неполным типом, поэтому вы должны объявить его, прежде чем сможете использовать sizeof. Это недействительно, как в C99, для создания элементов гибкого массива.

+0

-1 Опять же, неверно. См. Http://c-faq.com/ptrs/generic.html – fmark

+1

Я думаю, что -1 для неясной формулировки является немного суровым. Я честно забыл все о указателях функции до второго абзаца моего ответа, поэтому я не думал, что нужно провести различие раньше, тем более, что OP не особенно интересовался указателями на функции. –

+0

Является ли 'char arr [];' действительным в c89? – arr

Смежные вопросы