По вашим вопросам мне кажется, что вы не совсем понимаете указатели и распределение памяти, поэтому я попытаюсь объяснить это просто
Student * studentOne;
Может вести себя как двавещи:
- Простой указатель на ученика.Используйте эту опцию, если вы хотите выделить ученика в кучу
Массив учеников.Для этого варианта вы должны сделать что-то вроде этого:
Student * studentArr = (Student *) malloc (NUM_OF_STUDENTS * sizeof (Student))
Если вы этого не сделаетеесли вы хотите, чтобы ученик сидел внутри кучи, вам просто нужно создать простую переменную ученика
Student stud;
, если вы хотите, чтобы в стеке был массив учеников, он должен быть создан следующим образом:
Student stud[NUM_OF_STUDENTS]
На коллегу
Student ** studentMat;
Может вести себя как две вещи:
- Массив указателей на студентов
- Матрица ученика
Для первого варианта вы сделаете это:
Student ** studentPtrArr = (Student**)malloc(NUM_OF_STUDENTS * sizeof(Student*))
for(int i=0; i < NUM_OF_STUDENTS; i++){
Student[i] = (Student *)malloc(sizeof(Student))
}
Для второго варианта вы сделаете это:
Student ** studentPtrArr = (Student**)malloc(NUM_OF_STUDENT_ROWS * sizeof(Student*))
for(int i=0; i < NUM_OF_STUDENTS; i++){
Student[i] = (Student *)malloc(NUM_OF_STUDENT_COLUMNS sizeof(Student))
}