与内置类型变量类似,您也可以将结构体变量传递给函数。
将结构体传递给函数
我们建议您在学习如何将结构体传递给函数之前,先学习这些教程。
以下是如何将结构体传递给函数的方法
#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);
}
输出
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` 变量也会相应地被修改。