![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Как можно без ввода нового указателя на первый элемент массива вернуть(что-то типа дефолтной позиции) исходному указателю значение адреса первого элемента ?
Приведу пример:
|
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Мм.
Ну или более подробно:
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Mayk
А если я заюзываю указатель ptest в функции, а адресс массива передается как раз через ptest ? Как тогда ? не имея доступа к реальному массиву я ничего похоже сделать не могу. Добавлено @ 15:17 char *test_ret(char *result) {//do smt... *result++ = 's'; *result++ = 'e'; //.... *result = '\0'; return result; // и тут наблюдаем funny-тупость, если в cout << передается указатель, возвращаемый функцией :-) } Ессно можно выйти из ситуации, если ввести новый указатель, но ведь это дополнительная память и несколько тактов процессора - жалко |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Если у тебя есть адрес массива то конечно только через новую переменную. А собственно как ещё ptest может узнать что массив начался/кончался?
Ну или сделай в конце ptest -= (кол-во увеличений); . хотя в таком случае будет Большой Ой, если это кол-во забудешь изменить. Добавлено @ 15:23
Ну ты блин нашёл о чем жалеть Добавлено @ 15:24 Преждевременная оптимизация - корень всех зол -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну если совсем жаба душит, тогда делай так:
Эта, канешна, значительно медленнее, чем твой код Добавлено @ 18:32 И еще одна гениальная мысль: если ты в result символы последовательно записываешь, можешь strcpy использовать... Это сообщение отредактировал(а) Earnest - 18.5.2006, 08:17 -------------------- ... |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Я в таких случаях использую конструкцию вида
array[ index++ ] = value; |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Earnest
"И еще одна гениальная мысль: если ты в result символы последовательно записываешь, можешь strcpy использовать..." Неа... это я просто пример такой привел. SergeCpp, "array[ index++ ] = value;" :-).... ЗЫ это слиииишком жирно... Добавлено @ 19:45 Earnest че-то меня в твоем коде операторы разыменования напрягают. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
En_t_end, если тебе ну уж так важно быстродействие, то тебе надо идти к ассемблерщикам.
Правда современные компиляторы хорошо оптимизируют. Поэтому не удивляйся, если твой АСМовский код будет работать медленнее твоего же с++ ного . -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
А это я из твоего кода скопировала, а убрать забыла... -------------------- ... |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Mayk,
Мне и тут хорошо... Тут как раз проблема. Я постепенно иду к кроссплатформенности и соответственно приходиться юзать разные компиляторы. Если бы я юзал только Visual Studio, думаю, не стал бы даже и думать о такой примитивной(но хочу заметить от этого её эфективность не падает) оптимизации. Но приходиться заюзывать и старые борландовские компиляторы,g++, иногда просто g. А код, ведь, везде должен быть боеспособен. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Кстати. А чем тебя не устривает новая переменная? Запись в неё и чтение из неё выполняются не медленнее, чем *ptest++ = 'T';. А выделятся и освобождаться она вообще может за нулевое время (какая разница как сдвинуть стек - на 4 байта, или на 8?). Это сообщение отредактировал(а) Mayk - 18.5.2006, 16:14 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |