C 语言中的结构体和函数
在 C 语言编程中,struct 是一种派生数据类型。正如我们可以传递基本数据类型的参数一样,结构体数据类型的变量也可以传递给函数。您还可以使用按值调用和按引用调用方法传递结构体。 C 语言中的函数也可以返回结构体数据类型。
阅读本章以了解以下概念:
- 如何传递结构体类型的元素
- 如何传递结构体变量
- 如何从函数返回结构体
- 如何返回结构体指针
让我们从第一个开始,学习如何传递结构体类型的元素。
如何传递结构体元素
派生类型是任意主要类型和另一个派生类型的一个或多个元素的组合。可以将元素传递给函数,无论是通过值还是引用。
示例
在以下示例中,我们有一个名为"rectangle"的派生类型,它包含两个元素。我们有一个结构体变量"r",其中包含元素"r.len"和"l.brd",它们被传递给一个函数。然后,area() 函数计算矩形的面积。
#include <stdio.h> struct rectangle{ float len, brd; }; int area(float, float); int main(){ struct rectangle r; r.len = 10.50; r.brd = 20.5; area(r.len, r.brd); return 0; } int area(float a, float b){ double area = (double)(a*b); printf("Length: %f Breadth: %f Area: %lf ", a, b, area); return 0; }
输出
运行此代码时,将产生以下输出 -
Length: 10.500000 Breadth: 20.500000 Area: 215.250000
如何传递结构体变量
我们修改一下上面的示例,将结构体变量本身(而不是其元素)传递给 area() 函数。矩形结构体类型还包含一个名为"area"的附加元素。
示例
在函数内部,通过点运算符 (.) 访问结构体变量的元素,并计算面积。
#include <stdio.h> struct rectangle{ float len, brd; double area; }; int area(struct rectangle); int main(){ struct rectangle r; r.len = 10.50; r.brd = 20.5; area(r); return 0; } int area(struct rectangle r){ r.area = (double)(r.len*r.brd); printf("Length: %f Breadth: %f Area: %lf ", r.len, r.brd, r.area); return 0; }
输出
运行代码并检查其输出 −
Length: 10.500000 Breadth: 20.500000 Area: 215.250000
如何从函数返回结构体
我们知道,C 语言中的函数可以返回任何类型的值。在本例中,area() 函数被定义为返回一个结构体变量。
示例
在 main() 函数内部,长度和宽度的输入被传递给 area() 函数。在 area() 函数内部,计算面积并填充一个结构体变量,并将其返回给 main() 函数,并在其中显示其元素。
#include <stdio.h> struct rectangle { float len, brd; double area; }; struct rectangle area(float x, float y); int main(){ struct rectangle r; float x, y; x = 10.5; y = 20.5; r = area(x, y); printf("Length: %f Breadth: %f Area: %lf ", r.len, r.brd, r.area); return 0; } struct rectangle area(float x, float y){ double area = (double)(x*y); struct rectangle r = {x, y, area}; return r; }
输出
运行此代码时,将产生以下输出 -
Length: 10.500000 Breadth: 20.500000 Area: 215.250000
如何通过引用传递结构体
在 C 语言中,函数可以定义为通过值或引用传递其参数。引用是指向现有变量的指针。
示例
在此示例中,在 main() 函数中声明了一个"rectangle"类型的结构体变量,并将其地址传递给名为 area() 的用户定义函数。
调用 area() 函数时,它可以使用间接运算符 () 来使用该变量的元素。它会计算结果并将其赋值给区域元素"r area"。
#include <stdio.h> struct rectangle{ float len, brd; double area; }; int area(struct rectangle *); int main(){ struct rectangle r; r.len = 10.50; r.brd = 20.5; area(&r); return 0; } int area(struct rectangle *r){ r -> area = (double)(r -> len * r -> brd); printf("Length: %f Breadth: %f Area: %lf ", r -> len, r -> brd, r -> area); return 0; }
输出
运行代码并检查其输出 −
Length: 10.500000 Breadth: 20.500000 Area: 215.250000
如何返回结构体指针
让我们重写上面的代码,定义 area() 函数并返回一个指向矩形数据类型结构体的指针。
示例
area() 函数有两个按值调用的参数。main() 函数从用户那里读取长和宽,并将它们传递给 area() 函数,该函数填充一个结构体变量并将其引用传回给 main() 函数。
#include <stdio.h> struct rectangle { float len, brd; double area; }; struct rectangle * area(float x, float y); int main (){ struct rectangle *r; float x, y; x = 10.5; y = 20.5; r = area(x, y); printf("Length: %f Breadth: %f Area: %lf ", r->len, r->brd, r->area); return 0; } struct rectangle * area(float x, float y){ double area = (double)(x*y); static struct rectangle r; r.len = x; r.brd = y; r.area = area; return &r; }
输出
运行此代码时,将产生以下输出 -
Length: 10.500000 Breadth: 20.500000 Area: 215.250000