原文: https://www.programiz.com/c-programming/c-structure-function
在本教程中,您将学习将结构变量作为参数传递给函数。 您将学习借助示例从函数返回struct的方法。
与内置类型的变量类似,您也可以将结构变量传递给函数。
将结构传递给函数
我们建议您在学习如何将结构传递给函数之前先学习这些教程。
这是将结构传递给函数的方法
#include <stdio.h>struct student {char name[50];int age;};// function prototypevoid display(struct student s);int main() {struct student s1;printf("Enter name: ");// read string input from the user until \n is entered// \n is discardedscanf("%[^\n]%*c", s1.name);printf("Enter age: ");scanf("%d", &s1.age);display(s1); // passing struct as an argumentreturn 0;}void display(struct student s) {printf("\nDisplaying information\n");printf("Name: %s", s.name);printf("\nAge: %d", s.age);}
输出
Enter name: Bond
Enter age: 13
Displaying information
Name: Bond
Age: 13
在此,创建类型为struct student的结构变量s1。 使用display(s1);语句将该变量传递到display()函数。
从函数返回结构
这是从函数返回结构的方法:
#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;
}
在此,使用s = getInformation();语句调用getInformation()函数。 该函数返回struct student类型的结构。 返回的结构通过main()函数显示。
注意,getInformation()的返回类型也是struct student。
按引用传递结构
您还可以按引用传递结构(就像您按引用传递内置类型的变量一样)。 我们建议您在继续之前阅读引用传递的文档。
在按引用传递期间,结构变量的内存地址将传递给函数。
#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;
}
输出
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
在上述程序中,三个结构变量c1,c2和result的地址传递给addNumbers()函数。 此处,result通过引用传递。
当addNumbers()内的result变量被更改时,main()函数内的result变量也相应地被更改。
