Kiểu cấu trúc có thể xuất hiện với vai trò là kiểu trả về và kiểu tham số với hai phương án truyền tham trị và truyền tham chiếu.
Ví dụ 8.9. Truyền tham trị kiểu cấu trúc cho hàm
#include <stdio.h> #include <conio.h> struct Student { char name[50]; int age; };
148
void displayInfo(struct Student st); int main() {
struct Student st;
printf ("Nhap ten cua Sinh vien: "); scanf ("%[^\n]%*c", st.name); printf ("Nhap tuoi cua Sinh vien: "); scanf ("%d", &st.age);
displayInfo(st); // Truyen tham tri kieu cau truc cho ham return 0;
}
void displayInfo (struct Student st) {
printf ("\nHIEN THI THONG TIN SINH VIEN VUA NHAP\n"); printf ("Ho va ten: %s", st.name);
printf ("\nTuoi: %d", st.age); }
Ở ví dụ trên biến st có kiểu cấu trúc Student được tạo. Biến được truyền vào tham số của hàm displayInfo thông qua câu lệnh displayInfo(st).
Ví dụ 8.10. Giá trị trả về thuộc kiểu cấu trúc
#include <stdio.h> struct Student {
char name[50]; int age;
};
struct Student setupInfo();
void displayInfo(struct Student st); int main() { struct Student st; st = setupInfo(); displayInfo(st); getchar(); return 0; }
struct Student setupInfo() { struct Student st;
printf ("Nhap ho va ten cua sinh vien: "); scanf ("%[^\n]%*c", st.name);
printf ("Nhap tuoi cua sinh vien: "); scanf ("%d", &st.age);
return st; }
149 void displayInfo (struct Student st) {
printf ("\nHIEN THI THONG TIN SINH VIEN VUA NHAP\n"); printf ("Ho va ten: %s", st.name);
printf ("\nTuoi: %d", st.age); }
Ở đây, hàm setupInfo() được gọi thông qua câu lệnh st=setupInfo(). Hàm trả về
kiểu cấu trúc Student. Cấu trúc trả về được hiển thị trong hàm main().
Ví dụ 8.11. Truyền tham chiếu kiểu cấu trúc cho hàm
#include <stdio.h>
typedef struct complexNumber {
float real; float imaginary; } complexNumber;
void complexNumberSum (complexNumber n1, complexNumber n2, complexNumber *result);
int main() {
complexNumber n1, n2, result;
printf ("NHAP SO PHUC THU 1:\n"); printf ("Nhap phan thuc: ");
scanf ("%f", &n1.real); printf ("Nhap phan ao: "); scanf ("%f", &n1.imaginary);
printf ("NHAP SO PHUC THU 2:\n"); printf ("Nhap phan thuc: ");
scanf ("%f", &n2. real); printf ("Nhap phan ao: "); scanf ("%f", &n2.imaginary);
complexNumberSum (n1, n2, &result); printf ("\nKET QUA:");
printf ("\nTong phan thuc = %.1f\n", result.real); printf ("Tong phan ao = %.1f", result.imaginary); return 0;
}
void complexNumberSum (complexNumber n1, complexNumber n2, complexNumber *result)
{
150
result ->imaginary = n1. imaginary + n2. imaginary; }
Ở ví dụ trên, 3 cấu trúc n1, n2 và địa chỉ của result được truyền vào hàm
complexNumberSum. Ở đây, result được truyền bằng tham chiếu. Khi biến result trong
hàm complexNumberSum bị thay đổi, biến result trong hàm main() cũng thay đổi theo.