| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++]Размер указателя |
| Автор: PRF 6.12.2007, 18:00 | ||
| [C++] Привет!! У меня такой вопрос, а точнее его задал учитель по программированию.
Вот такой вопрос: Какой размер будет выведен (размер b) используя эти функции 1) sizeof(b) 2) strlen(b)??? Если в 1 случае sizeof(b) = 4 байт!!! Во втором я не знаю??? Могу сказать одно, что по логике должно быть = 0, т.к строка не задана, а только выделена память под нее, но когда я написал этот код, то strlen(b) стал = 14!!??? Помогите!!! Заранее спасибо!!! |
| Автор: zkv 6.12.2007, 18:31 | ||||
если говорить строго, то в этом примере:
нельзя сказать определенно, ни про первое ни про второе значение. sizeof(char *); - размер указателя зависит от платформы, чаще всего он равен 4 байтам, если интересно узнать про другие варианты, то поиск поможет. strlen(b); - тут вообще полная неопределенность, так как массив не инициализирован, функция strlen() считает элементы в массиве, до первого встретившегося нуль-символа. В данном он может встретиться только случайно, возможно в участке памяти даже за пределами массива, отсюда результат 14, в других условиях (на другой машине, в другой момент времени запуска, да просто звезды так сложатся) результат может быть другим. Если бы мы инициализировали массив (естественно правильно) то функция давала бы количество элементов до первого нуля, например такой код даст 0:
передай преподу, что sizeof это http://www.thescripts.com/forum/thread556123.html |
| Автор: PRF 6.12.2007, 19:17 | ||||
ну это не препод сказал функция, а я!!! Спасибо!!! И еще если про строковые указатели, то можете помочь разобраться в этой задачи!!! я не прошу решить ее и написать код, а просто объяснить, я не могу понять что и как!!! Задача!!! Создать массив строк. У пользователя должна быть возможность добавлять строку и просматривать на экране весь массив строк. Строки могут иметь разную длину, то есть память под них должна выделяться динамически. Использовать массив указателей на массивы строк!! В этой задачи я на понимаю "Использовать массив указателей на массивы строк!!" Вроде все остальное понятно, только вот то что указатель на чар может выделить память максимум в 255 символов
Если строка будет больше 255 символов, то мы должны выделить новую память большего размера, скопировать туда эту строку и удалить предыдущую!! Я это где то прочитал!! Но вот в чем дело, как выделить память большего размера > 255 символов, если максимум 255 символов, не понимаю??? |
| Автор: zkv 6.12.2007, 19:49 | ||
| какие 255 символов, хоть под 10 000 000 выдели, главное чтобы оперативки хватило. ну это просто: например массив под 10 строк неопределенной длины:
итого у нас тут массив указателей на строки из 10 элементов (его тоже можно сделать динамическим) под первые три указателя мы выделили участки памяти различного размера, остальные не использовали, в конце память освободили. |
| Автор: PRF 6.12.2007, 20:11 |
| ага понятно, вот только немного не так в задании, ну т.е я думал что это для всех одинаково!!! Посмотри пожалуйста файл так в задании еще рисунок прилагается, как это должно выглядеть!!! |
| Автор: PRF 6.12.2007, 20:32 |
| не,, я только про 2 задачу, а почему на рисунке используется указатель на указатель???? |
| Автор: zkv 6.12.2007, 20:43 | ||
ты у меня спрашиваешь? Там написано одно, а нарисовано другое, откуда мне знать, что именно требуется? если следовать рисунку, то принцип такой:
|
| Автор: PRF 6.12.2007, 20:48 |
| ага все спасибо, я просто думал может как то по другому!!! |