编辑这个页面须要登录或更高权限!

C 结构体和函数

在本教程中,您将学习将结构变量作为参数传递给函数。您将学习借助示例从函数返回struct的方法。

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

将结构传递给函数

我们建议您在学习如何将结构传递给函数之前先学习这些教程。

这是将结构传递给函数的方法

#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); //将struct作为参数传递

   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类型的struct变量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("Name: %s", s.name);
    printf("\nRoll: %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学生类型的结构。 在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;
}

输出结果

输入第一个数:
输入实部: 5.8
输入虚部: -3.4
输入第二个数:
输入实部: 9.9
输入虚部: -4.5

result.real = 15.7
result.imag = -7.9

在上面的程序中,三个结构变量c1,c2和结果的地址传递给addNumbers()函数。 在这里,结果通过引用传递。

当addNumbers()内部的结果变量被更改时,main()函数内部的结果变量也被相应地更改。