Hỏi về hàm trả về struct

Em viết 1 đoạn code như bên dưới để trả về nhiều hơn 1 giá trị và e dùng kiểu trả về 1 struct. Nhưng em thấy trông code nó cứ sao sao ấy. Dù kết quả như mong muốn. Các anh có thể giúp em sửa được không ạ

#include<stdio.h>

#include<stdint.h>

typedef struct {
    uint8_t id;
    uint8_t age;
}
student_t;
student_t get_info_student() {
    student_t student1;
    student1.id = 0;
    student1.age = 18;
    return student1;
}
int main(void) {
    uint8_t id;
    uint8_t age;
    id = get_info_student().id;
    age = get_info_student().age;
    printf("student Id = %d Age = %d", id, age);
    getchar();
    return 0;
}

Hàm thì tạm ổn rồi, nhưng đoạn gọi thì không ổn.
Bạn chỉ cần gọi 1 lần và lưu giá trị vào biến kiểu student_t thôi.

4 Likes

E hỏi trên 1 diễn đàn khác thì có nhận đc câu trả lời cũng giống anh .Nhưng e không hiểu giải thích lắm.

Even though it works, it creates two different objects for id and age . If they belong to the same entity, you should not call the function twice.

You can try like this,

student_t s1 = get_info_student();
id = s1.id;
age = s1.age;

Nhưng e thử get id 2 lần vẫn đc ạ

id = get_info_student().id;
id = get_info_student().id;

Nghĩa là bạn đang làm một cách dư thừa, tốn bộ nhớ. Bạn có thể gọi theo cách của bạn vài tỷ lần cũng được. Kết quả cũng chỉ là các idage giống nhau.
Giống như việc ai đó cần bản sao giấy khai sinh của bạn để lấy vài thông tin của bạn. Bạn đi photo-copy vài chục bản giấy khai sinh của bạn để đưa hết vài chục bản cho họ. Kết quả là tất cả đều chung các thông tin, chỉ tốn tiền.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?