跳到主要内容

C 语言结构体与函数

提示
  1. 传递结构体给函数:可以将结构体变量作为参数传递给函数,如display(s1);中将结构体变量s1传递给display()函数。
  2. 从函数返回结构体:函数可以返回结构体类型的数据,例如getInformation()返回struct student类型的结构体。
  3. 通过引用传递结构体:结构体也可以通过引用传递给函数,这意味着传递的是结构体变量的内存地址,如addNumbers()函数通过引用接收结构体变量。

与内置类型的变量一样,您也可以将结构体变量传递给函数。

将结构体传递给函数

在学习如何将结构体传递给函数之前,我们建议您学习以下教程。

以下是您如何将结构体传递给函数:

#include <stdio.h>
struct student {
char name[50];
int age;
};

// 函数原型
void display(struct student s);

int main() {
struct student s1;

printf("输入姓名: ");

// 从用户读取字符串输入,直到输入\n为止
// \n被丢弃
scanf("%[^\n]%*c", s1.name);

printf("输入年龄: ");
scanf("%d", &s1.age);

display(s1); // 将结构体作为参数传递

return 0;
}

void display(struct student s) {
printf("\n显示信息\n");
printf("姓名: %s", s.name);
printf("\n年龄: %d", s.age);
}

输出

输入姓名: Bond
输入年龄: 13

显示信息
姓名: Bond
年龄: 13

这里,创建了一个类型为struct student的结构体变量s1。使用display(s1);语句将该变量传递给了display()函数。

从函数返回结构体

以下是您如何从函数返回结构体:

#include <stdio.h>
struct student
{
char name[50];
int age;
};

// 函数原型
struct student getInformation();

int main()
{
struct student s;

s = getInformation();

printf("\n显示信息\n");
printf("姓名: %s", s.name);
printf("\n年龄: %d", s.age);

return 0;
}
struct student getInformation()
{
struct student s1;

printf("输入姓名: ");
scanf ("%[^\n]%*c", s1.name);

printf("输入年龄: ");
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("对于第一个数字,\n");
printf("输入实部: ");
scanf("%f", &c1.real);
printf("输入虚部: ");
scanf("%f", &c1.imag);

printf("对于第二个数字,\n");
printf("输入实部: ");
scanf("%f", &c2.real);
printf("输入虚部: ");
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;
}

输出

对于第一个数字,
输入实部: 1.1
输入虚部: -2.4
对于第二个数字,
输入实部: 3.4
输入虚部: -3.2

result.real = 4.5
result.imag = -5.6

在上述程序中,三个结构体变量c1、c2以及result的地址被传递给了addNumbers()函数。这里,result是通过引用传递的。

addNumbers()函数内的result变量被更改时,main()函数内的result变量也会相应地被更改。