C Cấu trúc và Chức năng

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.


Chuyể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 structures
  • C functions
  • User-defined Function

Đây là cách bạn có thể chuyển cấu trúc cho một hàm

#include <stdio.h>
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 \n is entered
   // \n is discarded
   scanf("%[^\n]%*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("\nDisplaying information\n");
   printf("Name: %s", s.name);
   printf("\nAge: %d", s.age);
}

Đầu ra

Enter name: Bond
Enter age: 13

Displaying information
Name: Bond
Age: 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 <stdio.h>
struct student
{
    char name[50];
    int age;
};

// function prototype
struct student getInformation();

int main()
{
    struct student s;

    s = getInformation();

    printf("\nDisplaying information\n");
    printf("Name: %s", s.name);
    printf("\nRoll: %d", s.age);
    
    return 0;
}
struct student getInformation() 
{
  struct student s1;

  printf("Enter name: ");
  scanf ("%[^\n]%*c", s1.name);

  printf("Enter age: ");
  scanf("%d", &s1.age);
  
  return s1;
}	

Ở đây, getInformation()hàm được gọi là using s = getInformation();câu lệnh. 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.

Truyề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 truyề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 <stdio.h>
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,\n");
    printf("Enter real part: ");
    scanf("%f", &c1.real);
    printf("Enter imaginary part: ");
    scanf("%f", &c1.imag);

    printf("For second number, \n");
    printf("Enter real part: ");
    scanf("%f", &c2.real);
    printf("Enter imaginary part: ");
    scanf("%f", &c2.imag);

    addNumbers(c1, c2, &result); 
    printf("\nresult.real = %.1f\n", 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

For first number,
Enter real part:  1.1
Enter imaginary part:  -2.4
For second number, 
Enter real part:  3.4
Enter imaginary part:  -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.









Gõ tìm kiếm nhanh...