2010-01-19 2 views
3

В C массивы передаются в качестве указателей. Структуры могут передаваться в функции либо по значению, либо по адресу (указателю). Есть ли какая-то конкретная причина, по которой мы не можем передать массив по значению, но мы можем передать structre по значению?Передача массивов по отношению к структурам к функциям

ответ

6

В C, все передается по значению. Существует другое правило, в котором говорится, что в большинстве контекстов имя массива эквивалентно указателю на его первый элемент. Передача массива функции является таким контекстом.

Итак, особый случай заключается не в том, что массивы передаются по ссылке, особый случай - the rule about arrays decaying to pointers. Это дает впечатление, что массив передается по ссылке (что это действительно так, но теперь вы знаете почему!)

Сообщение в моей ссылке выше объясняет более подробно о типе массива в разных контекстах.

+0

Указатели передаются по val. int * p1, int * p2; p1 = p2; здесь нет ссылок. адрес копируется с p2 на p1. –

+0

Да, указатели передаются по значению, как и все остальное. Для массивов * эффект * выглядит так, как будто они переданы по ссылке, но из-за «правила» о массивах, распадающихся на указатели. Конечно, значение указателя первого элемента массива передается по значению, но в этом случае это не имеет значения. –

+0

Спасибо Alok! Объяснение в указанном сообщении было очень полезно – cppdev

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