Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2010, 11:36   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию длина массива

Здравствуйте. Создаю массив, передаю указатель функции, а там длина массива уже другая =\

char str[10];
printf("sizeof: %d\n",sizeof(str)); // все в порядке, пишет 10
test(str);
...
void test(char *str)
{
printf("sizeof: %d\n",sizeof(str)); // здесь уже другое число
}

как такое может быть? функции test нужно знать длину массива.

Последний раз редактировалось Артэс; 06.10.2010 в 11:44.
Артэс вне форума Ответить с цитированием
Старый 06.10.2010, 11:44   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Индексный массив (в некоторых языках программирования также таблица, ряд) — именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом (в отличие от списка), доступ к которым осуществляется по индексу.

Индекс массива — целое число, либо значение типа, приводимого к целому, указывающее на конкретный элемент массива.
то есть массив это область памяти.
так что передавайте отдельным параметром размер.

ЗЫ, кстати во втором случае у вас str=char*, а в первом str=char[10]
разница огромна(вы получаете размер указателя)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.10.2010, 11:48   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

поправил функцию тест. Теперь sizeof(*str); вместо sizeof(str); и выдает число 1

Значит нет способа узнать размер массива, кроме как выделять отдельную область в памяти и туда записывать размер массива заранее?
Артэс вне форума Ответить с цитированием
Старый 06.10.2010, 11:55   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Артэс
Цитата:
начит нет способа узнать размер массива
нету. при передаче массива в функцию всегда передается только указатель на первый элемент. передавай дополнительно размер
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 06.10.2010, 12:34   #5
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Понятно. Спасибо
Артэс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длина пароля Lifefine Общие вопросы Delphi 7 25.02.2010 11:11
Длина слова IGoDoVaN Общие вопросы Delphi 14 12.06.2008 08:04
длина массива skif93 Microsoft Office Excel 2 24.11.2007 11:45
Длина множества ElenaA Общие вопросы Delphi 1 02.07.2007 12:10