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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 15:52   #1
Valter
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 51
Хорошо Инкремент для указателя массива структур

Есть мысли, из-за чего так происходит? Приведу только касающийся сути вопроса код:

Код:
struct file_and_date {
        char filename[100];
        struct tm filetime;
};
...

Код:
 struct file_and_date *file_table[1000];
К примеру, такой кусок не работает - ругается на инкрементирование в самом конце:

Код:
while (*file_table != NULL) {
                fprintf(stdout, "%s,  modification time: %d:%d:%d\n",
           (*file_table)->filename, (*file_table)->filetime.tm_hour,  (*file_table)->filetime.tm_min, (*file_table)->filetime.tm_sec);
                file_table++;
}
Пишет:
main.c:75: error: lvalue required as increment operand

PS: этот же фрагмент и все остальные уже переписаны мной с использованием индексации - все работает, да и обращения к элементам выглядят не так страшно. Но интересует именно описанный аспект - на всяких случай.

Последний раз редактировалось Valter; 31.05.2010 в 15:58.
Valter вне форума Ответить с цитированием
Старый 31.05.2010, 16:00   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

struct file_and_date *file_table = new file_table[ 1000 ];
Ибо массив создавали, а там указатель константный.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 31.05.2010, 16:04   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Я в C не разбираюсь, но это случайно не массив указателей?
Цитата:
Код:
struct file_and_date *file_table[1000];
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.05.2010, 16:12   #4
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

эммм, действительно, в общем, в любом случае нужно создавать еще один указатель на начало этого массива указателей :
struct file_and_date **ptr = file_table;
И уже его инкриментировать и прочей дурью заниматься =)
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 31.05.2010, 16:21   #5
Valter
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 51
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
struct file_and_date *file_table = new file_table[ 1000 ];
Ибо массив создавали, а там указатель константный.
Точно!, спасибо, не доглядел.

Кстати, я его не так создавал, а так:
Код:
*file_table = (struct file_and_date *) malloc(sizeof(struct file_and_date));
Забыл уточнить, что на чистом Си программа написана. Для каждого элемента память выделяется в цикле.

Спасибо!

Syuf
Цитата:
Я в C не разбираюсь, но это случайно не массив указателей?
Ну да, массив указателей на структуры.

Последний раз редактировалось Valter; 31.05.2010 в 16:30.
Valter вне форума Ответить с цитированием
Старый 31.05.2010, 17:32   #6
Card1nal
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 44
По умолчанию

извини за дурацкий вопрос, но почему массив структур а не списки?
Card1nal вне форума Ответить с цитированием
Старый 31.05.2010, 18:30   #7
Valter
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Card1nal Посмотреть сообщение
извини за дурацкий вопрос, но почему массив структур а не списки?
А почему бы и нет? Лично мне было удобнее так организовать хранение данных и доступ к ним.

Определил для себя нужные компоненты и занес их в структуру. В итоге получилась единица хранения нужной мне информации. Этими единицами хранения информации (точнее - указателями на них) заполнил одномерный массив заранее неизвестного размера (то есть размер как бы 1000 элементов, но это только указатели, сами структуры, на которые они указывают, размещаются динамически в зависимости от количества файлов - хотя это тоже не лучшее решение, потом сделаю, чтобы и сам массив с указателями динамически размещался).

Последний раз редактировалось Valter; 31.05.2010 в 18:41.
Valter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива структур silence_master Помощь студентам 4 05.05.2010 21:26
Сортировка массива структур 3OH! Помощь студентам 4 02.05.2010 21:32
Си : сортировка массива структур Чубрик Общие вопросы C/C++ 5 23.01.2010 22:02
Сортировка массива структур. nec117 Общие вопросы C/C++ 5 22.02.2009 18:01
Сортировка массива структур arturka Помощь студентам 1 21.06.2008 14:15