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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 21:55   #1
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию Массив указателей на структуры...

Доброго дня уважаемые! Моск ломаеца- суть проблемы-пишу программу со структурами,
struct student {
char name[100];
struct {
int dd;//день
int mm;//месяц
int yy;//год
}date_in;
struct {
int dd;
int mm;
int yy;
}date_out;
};
и вот собственно необходимо по ходу реализации создавать кучу таких структур и запихать все в массив, а лучше указатели на структуры в массив указателей(о боги)
пишу так...
student student_1={"Кудаев С.С.",{1,0,1},{2,8,6}};
student *stud_array[100];//массив указателей, не?
*stud_array[0]=&student_1;//по ходу выполнения программы будут создаваться новые структуры, а для начала занести первую
и нифига не правильно!!!!
прошу подскажите...
и ещё подскажите пожалуйста как передавать сей массив в функцию
что то вроде - void output_struct(struct student** p, const int size);
а вызов функции- output_struct(**stud_array, 100); ?
Кудаив вне форума Ответить с цитированием
Старый 26.04.2012, 10:40   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Непонятно зачем тебе указатели на структруры здесь. Храни сами структуры в массиве.
Код:
struct stud
{
  char name[21];
  int age;
};

void test(stud** st,int size)
{
   for(int i=0;i<size;i++)
   {
	 printf("%s\n%d\n",(st[i])->name,(st[i])->age);
   }
}

int main(int argc, char* argv[])
{
  stud* mas[10];
  stud st = {"vasya",3};
  stud st_1 = {"kolya",1};
  mas[0] = &st;
  mas[1] = &st_1;
  test(mas,2); 
  return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 26.04.2012, 12:37   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Кудаив

указатели на структуры в массив указателей

учти, что память при этом придется освобождать самостоятельно.

Код:
student* arr[100]; // для массива должен быть задан его максимальный размер
for (size_t i=0; i<100; i++)
    arr[i] = new student();
чтобы инициализировать экземпляры студней, структура должна иметь конструктор с необходимвми параметрами

и ещё подскажите пожалуйста как передавать сей массив в функцию

void zzz(student* begin, size_t N);

использование:

zzz(arr, 100); // передаем имя массива и его размер

а теперь - забудь обо всем, что написано выше (((((Ж
правильный путь - использовать C++

Код:
struct student
{
   std::string s; // для строк - только string. всякие char[100] - нах.
};

std::vector<student> arr; // для массивов - только вектор. всякие нативные массивы и указатели, когда они не нужны - нах.
Rififi вне форума Ответить с цитированием
Старый 26.04.2012, 13:28   #4
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Объявлять конструкторы структур не есть хорошо.
student* arr[100];
В таком случае память освобождать не нужно, структуры и массив создаются на стеке, удаляться сами после выхода из функции.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 26.04.2012, 15:41   #5
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

на С++ на учёбке было что то подобное- сделал без проблем через 1 класс и вектор, но эту задачку надо именно на си написать...
Кудаив вне форума Ответить с цитированием
Старый 26.04.2012, 15:43   #6
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

а вот
test(mas,2);
это же передача в функцию указателя на массив- правильно понимаю?
Кудаив вне форума Ответить с цитированием
Старый 26.04.2012, 15:45   #7
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Ну как бы да =)
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 26.04.2012, 16:43   #8
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

Помог помог!! благодарю))
Кудаив вне форума Ответить с цитированием
Старый 26.04.2012, 17:16   #9
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

проблема вылазит не пойму чего не так...
записываю в массив
const int size=100;
student *stud_array[size];
stud_array[0]=&student_1;
stud_array[1]=&student_2;
stud_array[2]=&student_3;
stud_array[3]=&student_4;
и вывожу функциейvoid output_struct(student** p, const int size ){

for(int i=0; i<size; i++){
printf("%d %s %d.%d.%d %d.%d.%d\n",i, (p[i])->name, (p[i])->date_in.dd, (p[i])->date_in.mm, (p[i])->date_in.yy, (p[i])->date_out.dd, (p[i])->date_out.mm, (p[i])->date_out.yy);
}
}
ошибка не при компиляции а уже при исполнении...

Последний раз редактировалось Кудаив; 26.04.2012 в 17:20.
Кудаив вне форума Ответить с цитированием
Старый 26.04.2012, 17:23   #10
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Потому что у тебя массив не заполнен на все 100 элементов, нужно в размере 4 передать в данном случае
void output_struct(student** p, const int size ) - сюда
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив указателей nattaella Компоненты Delphi 2 11.06.2011 16:40
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
массив указателей на структуры. С++. Перегрузка <<.Всю проблему не описать XD. Познающий Помощь студентам 8 06.02.2010 00:55
массив указателей в С ++ серг Помощь студентам 1 14.12.2009 18:49
Массив указателей на структуры SNAKE89 Общие вопросы C/C++ 4 27.12.2007 10:14