Trong hướng dẫn này, bạn sẽ học cách chuyển các biến cấu trúc làm đối số cho một hàm. Bạn sẽ học cách trả về cấu trúc từ một hàm với sự trợ giúp của các ví dụ.
Tương tự như các biến của các kiểu dựng sẵn, bạn cũng có thể chuyển các biến cấu trúc cho một hàm.
Truyền cấu trúc cho các hàm
Chúng tôi khuyên bạn nên tìm hiểu các hướng dẫn này trước khi tìm hiểu cách chuyển cấu trúc cho các hàm.
- Cấu trúc C
- Hàm C
- Chức năng do người dùng xác định
Đây là cách bạn có thể chuyển cấu trúc cho một hàm
#include struct student ( char name(50); int age; ); // function prototype void display(struct student s); int main() ( struct student s1; printf("Enter name: "); // read string input from the user until is entered // is discarded scanf("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); display(s1); // passing struct as an argument return 0; ) void display(struct student s) ( printf("Displaying information"); printf("Name: %s", s.name); printf("Age: %d", s.age); )
Đầu ra
Nhập tên: Trái phiếu Nhập tuổi: 13 Hiển thị thông tin Tên: Trái phiếu Tuổi: 13
Ở đây, một biến struct s1 kiểu struct student
được tạo. Biến được chuyển cho display()
hàm using display(s1);
câu lệnh.
Trả về cấu trúc từ một hàm
Đây là cách bạn có thể trả về cấu trúc từ một hàm:
#include struct student ( char name(50); int age; ); // function prototype struct student getInformation(); int main() ( struct student s; s = getInformation(); printf("Displaying information"); printf("Name: %s", s.name); printf("Roll: %d", s.age); return 0; ) struct student getInformation() ( struct student s1; printf("Enter name: "); scanf ("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); return s1; )
Ở đây, getInformation()
hàm được gọi là using s = getInformation();
statement. Hàm trả về một cấu trúc kiểu struct student
. Cấu trúc trả về được hiển thị từ main()
hàm.
Lưu ý rằng, kiểu trả về getInformation()
cũng là struct student
.
Chuyển cấu trúc bằng tham chiếu
Bạn cũng có thể chuyển cấu trúc bằng tham chiếu (theo cách tương tự như bạn chuyển các biến của kiểu tích hợp bằng tham chiếu). Chúng tôi khuyên bạn nên đọc qua hướng dẫn tham khảo trước khi tiếp tục.
Trong quá trình chuyển bằng tham chiếu, địa chỉ bộ nhớ của các biến cấu trúc được chuyển cho hàm.
#include typedef struct Complex ( float real; float imag; ) complex; void addNumbers(complex c1, complex c2, complex *result); int main() ( complex c1, c2, result; printf("For first number,"); printf("Enter real part: "); scanf("%f", &c1.real); printf("Enter imaginary part: "); scanf("%f", &c1.imag); printf("For second number, "); printf("Enter real part: "); scanf("%f", &c2.real); printf("Enter imaginary part: "); scanf("%f", &c2.imag); addNumbers(c1, c2, &result); printf("result.real = %.1f", result.real); printf("result.imag = %.1f", result.imag); return 0; ) void addNumbers(complex c1, complex c2, complex *result) ( result->real = c1.real + c2.real; result->imag = c1.imag + c2.imag; )
Đầu ra
Đối với số đầu tiên, Nhập phần thực: 1.1 Nhập phần ảo: -2.4 Đối với số thứ hai, Nhập phần thực: 3.4 Nhập phần ảo: -3,2 result.real = 4,5 result.imag = -5,6
Trong chương trình trên, ba biến cấu trúc c1, c2 và địa chỉ của kết quả được chuyển cho addNumbers()
hàm. Ở đây, kết quả được chuyển bằng tham chiếu.
Khi biến kết quả bên trong hàm addNumbers()
bị thay đổi, thì biến kết quả bên trong main()
hàm cũng bị thay đổi theo.