💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# C 结构与函数 > 原文: [https://www.programiz.com/c-programming/c-structure-function](https://www.programiz.com/c-programming/c-structure-function) #### 在本教程中,您将学习将结构变量作为参数传递给函数。 您将学习借助示例从函数返回`struct`的方法。 与内置类型的变量类似,您也可以将结构变量传递给函数。 * * * ## 将结构传递给函数 我们建议您在学习如何将结构传递给函数之前先学习这些教程。 * [C 结构](/c-programming/c-structures) * [C 函数](/c-programming/c-functions) * [用户定义的函数](/c-programming/c-user-defined-functions) 这是将结构传递给函数的方法 ```c #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); } ``` **输出** ```c Enter name: Bond Enter age: 13 Displaying information Name: Bond Age: 13 ``` 在此,创建类型为`struct student`的结构变量`s1`。 使用`display(s1);`语句将该变量传递到`display()`函数。 * * * ## 从函数返回结构 这是从函数返回结构的方法: ```c #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`。 * * * ## 按引用传递结构 您还可以按引用传递结构(就像您按引用传递内置类型的变量一样)。 我们建议您在继续之前阅读[引用传递](/c-programming/c-pointer-functions)的文档。 在按引用传递期间,结构变量的内存地址将传递给函数。 ```c #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; } ``` **输出** ```c 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`变量也相应地被更改。