![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Нам дали такое задание:
Почему следуюшая прога не печатает количество елементов в массиве:
Б принципе можно понять, что в функцию посылается указатель, который занимает 2 байта и sizeof(vec[0])=sizeof(int)=2, так и выходит 1. А теперь вопрос поинтереснее: как можно это исправить? Конечно кроме тривиального решения: return 6. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
А ежели так:
void main () { int vec[6], k; cout<<(sizeof(vec)/sizeof(int)); } В функцию передается только указатель, все же... -------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Да, ты прав, именно в этом весь "прикол". Но как это можно исправить? Просто переписать строку a=sizeof(vec)/sizeof(vec[0]) в main нельзя, надо именно с функцией.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Temnozor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 27.6.2002 Где: Тюмень Репутация: нет Всего: нет |
Дело в том, что int vec[6] в main'е - это массив,
а в другую функцию массив мы передать не можем в принципе (в C++). Мы передаем только указатель на массив. (Кто думает, что массив и указатель на массив - одно и тоже, жестоко ошибается). Примочка типа
Поэтому в функции vec оператор sizeof возвращает размер указателя, а не массива. Выход: Надо писать sizeof(vec)/sizeof(vec[0]); прямо в main. В vec'е оператором sizeof размер массива не определить. --------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound. |
|||
|
||||
| Temnozor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 27.6.2002 Где: Тюмень Репутация: нет Всего: нет |
Опа.
Пока писал предыдущее сообщение, две мессаги появились. --------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound. |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
А для подобных задач как раз и сделаны классы.... -------------------- С уважением, А. Фролов. |
|||
|
||||
| Lion |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.3.2002 Репутация: нет Всего: 2 |
Варианты:
1. Не маяться дурью, и писать без функции. 2. Перевавать в функцию указатель на массив и размер массива. Но зачем тогда функция?? 3. Сделать так:
Не очень корректно, но может сработать. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Да, но как это в функции сделать? К такому решению я и пришел (смотрите концовку моей темы). Видимо это дурь какая-то. Так лектору и скажу.
Всем спасибо за участие. 2Lion: Спасибо за решение. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Люда |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 24.4.2002 Репутация: нет Всего: нет |
Ежели обязательно в ф-ции, посылай в нее sizeof(vek), а в ф-ции дели на sizeof(int), вот и массив пересылать не надо и ф-ция присутствует
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |