В този урок ще се научите да предавате структурни променливи като аргументи на функция. Ще се научите да връщате struct от функция с помощта на примери.
Подобно на променливите от вградените типове, можете също да предавате структурни променливи на функция.
Предаване на структури на функции
Препоръчахме ви да научите тези уроци, преди да научите как да предавате структури на функции.
- С структури
- C функции
- Потребителска функция
Ето как можете да предавате структури на функция
#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); )
Изход
Въведете име: Bond Въведете възраст: 13 Показване на информация Име: Bond Възраст: 13
Тук се създава структурна променлива s1 от тип struct student
. Променливата се предава на display()
функцията с помощта на display(s1);
оператор.
Връщане на структура от функция
Ето как можете да върнете структурата от функция:
#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; )
Тук getInformation()
функцията се извиква с помощта на s = getInformation();
оператор. Функцията връща структура от тип struct student
. Върнатата структура се показва от main()
функцията.
Забележете, че и типът на връщане getInformation()
е struct student
.
Предаване на структура по препратка
Можете също така да предавате структури по препратка (по подобен начин, както предавате променливи от вграден тип по препратка). Препоръчваме ви да прочетете урок за прехвърляне, преди да продължите.
По време на преминаване по препратка адресите на паметта на структурни променливи се предават на функцията.
#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; )
Изход
За първо число въведете реална част: 1.1 Въведете въображаема част: -2.4 За второ число въведете реална част: 3.4 Въведете въображаема част: -3.2 резултат.real = 4.5 result.imag = -5.6
В горната програма на addNumbers()
функцията се предават три структурни променливи c1, c2 и адресът на резултата . Тук резултатът се предава чрез препратка.
Когато променливата на резултата вътре в addNumbers()
е променена, променливата на резултата във main()
функцията също се променя съответно.