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);
}

输出

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` 变量也会相应地被修改。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战