| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вот такая задачка... |
| Автор: neutrino 12.7.2002, 11:56 | ||
| Нам дали такое задание: Почему следуюшая прога не печатает количество елементов в массиве:
Б принципе можно понять, что в функцию посылается указатель, который занимает 2 байта и sizeof(vec[0])=sizeof(int)=2, так и выходит 1. А теперь вопрос поинтереснее: как можно это исправить? Конечно кроме тривиального решения: return 6. |
| Автор: Alex101 12.7.2002, 13:01 |
| А ежели так: void main () { int vec[6], k; cout<<(sizeof(vec)/sizeof(int)); } В функцию передается только указатель, все же... |
| Автор: neutrino 12.7.2002, 13:06 |
| Да, ты прав, именно в этом весь "прикол". Но как это можно исправить? Просто переписать строку a=sizeof(vec)/sizeof(vec[0]) в main нельзя, надо именно с функцией. |
| Автор: Temnozor 12.7.2002, 13:10 | ||
| Дело в том, что int vec[6] в main'е - это массив, а в другую функцию массив мы передать не можем в принципе (в C++). Мы передаем только указатель на массив. (Кто думает, что массив и указатель на массив - одно и тоже, жестоко ошибается). Примочка типа
Поэтому в функции vec оператор sizeof возвращает размер указателя, а не массива. Выход: Надо писать sizeof(vec)/sizeof(vec[0]); прямо в main. В vec'е оператором sizeof размер массива не определить. |
| Автор: Temnozor 12.7.2002, 13:11 |
| Опа. Пока писал предыдущее сообщение, две мессаги появились. |
| Автор: Alex101 12.7.2002, 13:19 | ||
А для подобных задач как раз и сделаны классы.... |
| Автор: Lion 12.7.2002, 13:21 | ||
| Варианты: 1. Не маяться дурью, и писать без функции. 2. Перевавать в функцию указатель на массив и размер массива. Но зачем тогда функция?? 3. Сделать так:
Не очень корректно, но может сработать. |
| Автор: neutrino 12.7.2002, 13:35 |
| Да, но как это в функции сделать? К такому решению я и пришел (смотрите концовку моей темы). Видимо это дурь какая-то. Так лектору и скажу. Всем спасибо за участие. 2Lion: Спасибо за решение. |
| Автор: Люда 12.7.2002, 14:20 |
| Ежели обязательно в ф-ции, посылай в нее sizeof(vek), а в ф-ции дели на sizeof(int), вот и массив пересылать не надо и ф-ция присутствует |