Re[8]: Инициализация указателя на массив
От: jazzer Россия Skype: enerjazzer
Дата: 23.03.04 09:38
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, jazzer, Вы писали:


J>>предлагаю помедитировать над следующим кодом

J>>
J>>typedef int Arr[5];

J>>void f(Arr& x);

J>>int main()
J>>{
J>>   int arr5[5];
J>>   int arr6[6];

J>>   f(arr5);
J>>   f(arr6);
J>>};
J>>

LVV>На компиляторе не проверял, но должна быть ошибка трансляции на второй функции.
LVV>Передача массива по ссылке — нормально. Ну и что?
LVV>Имеется ввиду, что выполняется контроль типов и "массив другого типа" компилятор не пропускает.
LVV>К вопросу о полноценности типа массива. Yes?

No.

Твои слова "Имя массива — это адрес его первого элемента" означают, что тип как arr5, так и arr6 — int*, соответственно, ни один вызов не должен скомпилироваться.

Так что суть именно в приведениях типа — я тебе только что продемонстрировал случай, когда оно не происходит и используется явный тип массива.
А когда оба эти массива можно передать в функцию, принимающую указатель на int — здесь как раз происходит приведение типа от массива к указателю.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.