Вопрос: Тогда почему объявления указателей и массивов взаимозаменяемы в качестве формальных параметров? Ответ: Оператор sizeof сообщает размер указателя, который на самом деле получает функция. (см. вопрос 2.4). Так как массивы немедленно превращаются в указатели, массив на самом деле не передается в функцию. По общему правилу, любое похожее на массив объявление параметра
рассматривается компилятором как указатель, так что если был передан массив, функция получит:
Это превращение происходит только для формальных параметров функций, больше нигде. Если это превращение раздражает Вас, избегайте его; многие пришли к выводу, что порождаемая этим путаница перевешивает небольшое преимущество от того, что объявления смотрятся как вызов функции и/или напоминают о том, как параметр будет использоваться внутри функции. Смотри: K&R I Разд.5.3 c. 95, Разд.A10.1 c. 205; K&R II Разд.5.3 c. 100, Разд.A8.6.3 c. 218, Разд.A10.1 c.226; H&S Разд.5.4.3 c. 96; ANSI Разд.3.5.4.3, Разд.3.7.1, CT&P Разд.3.3 c. 33-4. |