2012-05-20 6 views

ответ

1

На большинстве платформ указатели обычно имеют фиксированный размер, основанный на архитектуре памяти системы, для которой вы компилируете. Их тип, в связи с этим, не имеет значения. Точка int имеет тот же размер, что и точка для комплекса struct. Тот факт, что это void, не меняет этого.

+1

Это не обязательно так. –

+0

@OliCharlesworth - когда/как размер указателя отличается? – zellio

+0

В стандарте C нет утверждений о том, что все указатели должны быть одного размера, а на некоторых архаичных архитектурах они определенно не имеют одинакового размера (хотя у меня нет никаких примеров, чтобы справиться). –

1

Все указатели имеют размер, известный компилятору во время компиляции; это размер указываемого предмета, который может быть другим. Вы сами передаете нужный размер malloc/calloc, поэтому у компилятора нет проблем с распределением.

EDIT (в ответ на комментарий) Бывают случаи, когда размеры разных указателей различны. Например, в коде, скомпилированном для архитектуры Гарварда, указатель данных должен включать дополнительное хранилище, которое отличает данные, хранящиеся в памяти программы, от данных, хранящихся в памяти данных, в то время как указатели на объекты не нуждаются в этом дополнительном хранилище. Однако это известно компилятору, поэтому он знает требуемый размер выделения, глядя на тип указателя.

+5

C не C++, обсуждение шаблонов здесь не относится. –

+1

@VariableLengthCoder К сожалению, вы правы! Меня отбросило упоминание «общих» указателей. – dasblinkenlight

+0

Согласен, использование OP неопределенного термина «общий указатель» затрудняет ответ на этот вопрос. –

0

Указатели имеют одинаковый размер независимо от того, на что они указывают, это только то, что они указывают на то, что могут быть разных размеров.

+0

Это не обязательно так. –

3

Я не уверен, что вы подразумеваете под «общим указателем», но если вы имеете в виду «указатель на void», это просто тип, способный представлять любое другое значение указателя . Это не означает, что он должен быть сколь угодно большим; на самом деле он (определяется как) тот же размер и представление, что и «указатель на символ», который также может указывать на любой тип.

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