Bài tập về Struct trong C

Hiện tại mình đang làm bài tập làm quen với structure trong C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 3

//Excercise1
struct course
{

    char department[16];
    int courseNum;
    char courseTitle[31];
    short credits;
};
typedef struct course Course;
void inputCourse(Course *c);
void printCourse(Course *c);
void printCourseRow(Course *c);
void inputAllCourses(Course **c, int size);
void printAllCourses(Course ** c, int size);

int main(void)
{
    Course *courses[SIZE];
    inputAllCourses(courses, SIZE);
    printAllCourses(courses, SIZE);

}

//Excercise2
void inputCourse(Course *c)
{
    printf("Department: ");
    fgets(&c->department, 15, stdin);
    printf("Course Number: ");
    scanf("%d", &c->courseNum);
    printf("Course Title: ");
    fgets(&c->courseTitle, 30, stdin);
    fgets(&c->courseTitle, 30, stdin);
    printf("Credits: ");
    scanf("%d", &c->credits);  
    fflush(stdin);

}

//Excercise3
void printCourse(Course *c)
{
   printf("%-20s%020d\n", "Course number:", c->courseNum);
   printf("%-20s%21s", "Department:", c->department);
   printf("%-20s%21s", "Course Title:", c->courseTitle);
   printf("%-20s%20d\n", "Credits:",  c->credits);

}

//Excercise4
void printCourseRow(Course *c)
{
    printf("%s%d\n%s%d\n", c->department, c->courseNum, c->courseTitle, c->credits);
}

//Excercise5
void inputAllCourses(Course **c, int size)
{
   for(int i = 0; i < size; i++)
   {
       c[i] = (Course *)malloc(sizeof(Course));
       inputCourse(c[i]);
   }
}

//Excercise6
void printAllCourses(Course ** c, int size)
{
   for(int i = 0; i < size; i++)
   {
       printCourse(c[i]);
   }
}


Code của mình hiện tại không có vấn đề gì, nhưng mình muốn hỏi 1 tí về việc

  1. Ở hàm main mình khai báo sử dụng con trỏ, sau đó trong hàm inputAllCourses sử dụng cấp phát động. Tuy nhiên khi mình thay bằng khai báo struct bằng array như Course arr[3]; sau đó inputAllCourses(&arr) thì tại sao lại không thể sử dụng malloc vậy ạ?
  2. ** ở hai method, tuy mình dùng thì code hoạt động hiệu quả nhưng mình vẫn chưa hiểu lắm nếu khi sử dụng 1 dấu * thì nó vẫn sẽ access và cấp phát động hoạt động bình thường chứ nhỉ?
    Mình cảm ơn.
  1. Chưa rõ ý của bạn.
  2. ** = con trỏ cấp 2 = mảng con trỏ = con trỏ đến con trỏ.
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?