Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Cách truyền toàn bộ cấu trúc làm đối số cho hàm trong C


Có ba cách để truyền giá trị của cấu trúc từ hàm này sang hàm khác:

  • Truyền từng thành viên riêng lẻ làm đối số.
  • Truyền toàn bộ cấu trúc làm đối số.
  • Truyền địa chỉ của cấu trúc làm đối số.

Hãy xem cách truyền toàn bộ cấu trúc làm đối số cho hàm.

  • Tên biến cấu trúc được đưa làm đối số trong lời gọi hàm.
  • Nó được thu nhận trong một biến cấu trúc khác trong tiêu đề hàm.
  • Nhược điểm là một bản sao của toàn bộ cấu trúc được tạo lại, lãng phí bộ nhớ.

Ví dụ 1

Chương trình sau minh họa cách truyền toàn bộ cấu trúc làm đối số:

#include <stdio.h> 
struct date { 
    int day; 
    char month[10]; 
    int year; 
}; 
int main() { 
    struct date d; 
    printf("Nhập ngày, tháng, năm: "); 
    scanf("%d%s%d", &d.day, d.month, &d.year); 
    display(d); // truyền toàn bộ cấu trúc làm đối số 
    return 0; 
} 
void display(struct date d) { 
    printf("Ngày=%d\n", d.day); 
    printf("Tháng=%s\n", d.month); 
    printf("Năm=%d\n", d.year); 
}

Kết quả

Nhập ngày, tháng, năm: 18 JAN 2021 
Ngày=18 
Tháng=JAN 
Năm=2021

Ví dụ 2

Ví dụ khác minh họa việc truyền toàn bộ cấu trúc làm đối số:

#include <stdio.h> 
// Khai báo cấu trúc 
struct add { 
    int var1; 
    int var2; 
} a; 

// Khai báo và trả về hàm 
void show(struct add a) { 
    int sum; 
    sum = a.var1 + a.var2; 
    printf("Giá trị cộng là %d", sum); 
} 

void main() { 
    struct add a; 
    printf("Nhập biến 1 = "); 
    scanf("%d", &a.var1); 
    printf("Nhập biến 2 = "); 
    scanf("%d", &a.var2); 
    show(a); 
}

Kết quả

Nhập biến 1 = 20 
Nhập biến 2 = 50 
Giá trị cộng là 70

Ví dụ 3

Chương trình C khác minh họa việc truyền toàn bộ cấu trúc làm đối số, giải thích khai báo cấu trúc, hàm trả về, v.v.

#include <stdio.h> 
// Khai báo cấu trúc 
struct student { 
    int s1, s2, s3; 
} s[5]; 

// Khai báo và trả về hàm 
void addition(struct student s[]) { 
    int i, sum; 
    for (i = 1; i < 4; i++) { 
        sum = s[i].s1 + s[i].s2 + s[i].s3; 
        printf("Sinh viên %d đạt tổng %d\n", i, sum); 
    } 
} 

void main() { 
    int i; 
    for (i = 1; i < 4; i++) { 
        printf("Nhập điểm sinh viên %d môn 1 = ", i); 
        scanf("%d", &s[i].s1); 
        printf("Nhập điểm sinh viên %d môn 2 = ", i); 
        scanf("%d", &s[i].s2); 
        printf("Nhập điểm sinh viên %d môn 3 = ", i); 
        scanf("%d", &s[i].s3); 
    } 
    addition(s); 
}

Kết quả

Nhập điểm sinh viên 1 môn 1 = 25 
Nhập điểm sinh viên 1 môn 2 = 89 
Nhập điểm sinh viên 1 môn 3 = 45 
Nhập điểm sinh viên 2 môn 1 = 12 
Nhập điểm sinh viên 2 môn 2 = 45 
Nhập điểm sinh viên 2 môn 3 = 89 
Nhập điểm sinh viên 3 môn 1 = 12 
Nhập điểm sinh viên 3 môn 2 = 78 
Nhập điểm sinh viên 3 môn 3 = 12 
Sinh viên 1 đạt tổng 159 
Sinh viên 2 đạt tổng 146 
Sinh viên 3 đạt tổng 102