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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 05:43   #11
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
int massiv[3];
int *p = massiv;

for (int i = 0; i < 3; i++) {
	*p++= i; //здесь инкремент указателя
}
заменив *p++= i на p[i] или на *(p + i) что вы думаете происходит?
ТОЖЕ ВСЁ РАБОТАЕТ! (здесь работает, а там нет)
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 10.01.2010 в 05:46.
RUSt88 вне форума Ответить с цитированием
Старый 10.01.2010, 10:54   #12
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

ну вот. кое-что проясняется.
т.е. ваш вопрос должен был звучать так:
ПОЧЕМУ вместо *(pmat + i) (и похожее в коде) НЕЛЬЗЯ писать *pmat++ ??? ('*' перед pmat++)

цикл, который вы сверху написали правильный. при заполнении матрицы вы наверно не учли, что если вы обнуляли строки своей матрицы
в цикле так:

Код:
for (int i = 0; i < R; i++)
{
  *pmat++ = new int[R]; //создаём массив указателей
}
то после этого цикла pmat будет уже указывать за массив.
pmat++ смещает указатель на один.


Короче, лучше бы разместили тут код, который у вас не работает. А то так можно долго гадать, где же вы там накосячили.
_Ч_ вне форума Ответить с цитированием
Старый 10.01.2010, 11:11   #13
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

И еще в догонку вам подумать.

Не пробовали двумерные матрицы в памяти выделять одним куском памяти? Для матрицы MxN надо было бы выделить M*N ячеек, а обращение к ij элементу выглядело бы так: pMatrixp[i * N + j].
Вы конечно же можете сказать что тут целое умножение дя еще и сложение только для того, чтобы считать/записать что-то в ячейку.
Да, это так. А сколько по времени длится одно обращение к ячейке динамически выделенной памяти? Я вот не знаю? А создание такой матрицы уже в M раз быстрее вашего варианта. Про выделения большого куска памяти нужно тоже говорить отдельно.

А еще что вы собираетесь делать со своей матрицей? двигать туда сюда интовые значения? или более сложные вычисления? при более сложных вычислениях разница между *p++ и p[i] уходит в тень этих вычислений.

А если вам тупо надо свою прогу 'разогнать' и потом показать ее преподу, то тут тоже цель не оправдывает средства. У вас программа висит в вводе большую часть времени. Препод не заметит разницы между десятком микросекунд и между миллисекундой. Хотя в 100 раз вы этим явно ничего не разгоните.

Единственное оправдание таким 'оптимизациям' - чисто академический интерес.
С практической точки зрения, лучше всего писать p[i][j] ибо так понятнее.

Последний раз редактировалось _Ч_; 10.01.2010 в 11:14.
_Ч_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив указателей в С ++ серг Помощь студентам 1 14.12.2009 18:49
Массив указателей (паскаль) diliana Помощь студентам 19 14.11.2009 11:53
массив указателей на методы класса? cout Общие вопросы C/C++ 2 08.05.2008 09:43
Массив указателей на структуры SNAKE89 Общие вопросы C/C++ 4 27.12.2007 10:14