| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > указатели на первый элемент массива |
| Автор: En_t_end 17.5.2006, 15:05 | ||
| Как можно без ввода нового указателя на первый элемент массива вернуть(что-то типа дефолтной позиции) исходному указателю значение адреса первого элемента ? Приведу пример:
|
| Автор: Mayk 17.5.2006, 15:08 | ||||
Мм.
Ну или более подробно:
|
| Автор: En_t_end 17.5.2006, 15:12 |
| Mayk А если я заюзываю указатель ptest в функции, а адресс массива передается как раз через ptest ? Как тогда ? не имея доступа к реальному массиву я ничего похоже сделать не могу. Добавлено @ 15:17 char *test_ret(char *result) {//do smt... *result++ = 's'; *result++ = 'e'; //.... *result = '\0'; return result; // и тут наблюдаем funny-тупость, если в cout << передается указатель, возвращаемый функцией :-) } Ессно можно выйти из ситуации, если ввести новый указатель, но ведь это дополнительная память и несколько тактов процессора - жалко |
| Автор: Earnest 17.5.2006, 18:31 | ||
Ну если совсем жаба душит, тогда делай так:
Эта, канешна, значительно медленнее, чем твой код Добавлено @ 18:32 И еще одна гениальная мысль: если ты в result символы последовательно записываешь, можешь strcpy использовать... |
| Автор: SergeCpp 17.5.2006, 18:59 |
| Я в таких случаях использую конструкцию вида array[ index++ ] = value; |
| Автор: En_t_end 17.5.2006, 19:44 |
| Earnest "И еще одна гениальная мысль: если ты в result символы последовательно записываешь, можешь strcpy использовать..." Неа... это я просто пример такой привел. SergeCpp, "array[ index++ ] = value;" :-).... ЗЫ это слиииишком жирно... Добавлено @ 19:45 Earnest че-то меня в твоем коде операторы разыменования напрягают. |
| Автор: Mayk 17.5.2006, 19:57 |
| En_t_end, если тебе ну уж так важно быстродействие, то тебе надо идти к ассемблерщикам. Правда современные компиляторы хорошо оптимизируют. Поэтому не удивляйся, если твой АСМовский код будет работать медленнее твоего же с++ ного . |
| Автор: Earnest 18.5.2006, 08:16 |
А это я из твоего кода скопировала, а убрать забыла... |
| Автор: En_t_end 18.5.2006, 15:43 | ||
Mayk,
Мне и тут хорошо... Тут как раз проблема. Я постепенно иду к кроссплатформенности и соответственно приходиться юзать разные компиляторы. Если бы я юзал только Visual Studio, думаю, не стал бы даже и думать о такой примитивной(но хочу заметить от этого её эфективность не падает) оптимизации. Но приходиться заюзывать и старые борландовские компиляторы,g++, иногда просто g. А код, ведь, везде должен быть боеспособен. |
| Автор: Mayk 18.5.2006, 16:13 | ||
Кстати. А чем тебя не устривает новая переменная? Запись в неё и чтение из неё выполняются не медленнее, чем *ptest++ = 'T';. А выделятся и освобождаться она вообще может за нулевое время (какая разница как сдвинуть стек - на 4 байта, или на 8?). |
| Автор: En_t_end 18.5.2006, 19:24 | ||
Mayk,
|