Image

Image_human wrote in Imageru_cpp

Вопрос об указателях на указатели в структурах данных на Си

Сразу скажу, я только учусь программировать.
Имеется структура данных, в которой есть массив указателей типа **pSubjects.
Вопрос: как правильно внести данные присвоить указатели в этот **pSubjects. Я это сделал так, как приведено в функции main();
Если нет этого **pSubjects, то всё понятно, можно одной строчкой задать...а тут пришлось выдумывать.
UPD.Решение найдено!

Добавляем помимо основной структуры ещё одну:
struct Predmetq { //struktura predmetov
char *Predmet1;
char *Predmet2;
char *Predmet3
};

struct Predmetq Subjects[]=
{
{"Himija", "Fizika"},
{"Nemeckij", "Fizika", "Muzqka"},
{"Ekonomika", "Angliskij", "Russkij"},
{"Informatika", "Muzqka"},
};

В Main() присваиваем значение указателю для каждой строки
Tudengid[0].pSubjects=&Subjects[0].Predmet1;
Tudengid[1].pSubjects=&Subjects[1].Predmet1;
Tudengid[2].pSubjects=&Subjects[2].Predmet1;
Tudengid[3].pSubjects=&Subjects[3].Predmet1;



struct Student {
char *pName; //указатель на имя студента
int nSubjects; //сколько у студента предметов
char **pSubjects; //имена этих предметов. указатель на указатель символьных строк
struct Student *pNext; //указатель на следующего студента
};

struct Student Tudengid[]= //сткруктура студенты
{
{"Student1", 2}, //имя и сколько у него предметов
{"Student2", 1},
{"Student3", 3},
{"Student4", 1},
};

main(){

char *Predmetq[] ={"Himija", "Fizika"};
Tudengid[0].pSubjects=Predmetq;

char *Predmetq1[] ={"Fizika", "\0"};
Tudengid[1].pSubjects=Predmetq1;

char *Predmetq2[] ={"Russian", "Himija", "English", "\0"};
Tudengid[2].pSubjects=Predmetq2;

char *Predmetq3[] ={"English", "\0"};
Tudengid[3].pSubjects=Predmetq3;
}