C语言 结构体(Struct)详解及示例代码
什么是结构体(struct)?
结构体是C语言中一种构造类型(Compound Type),它可以将多个不同类型的变量组合成一个整体,方便在程序中进行操作。
一个结构体可以包含任意数量的成员变量,每个成员变量可以是基本类型,也可以是其他结构体类型。结构体定义语法如下:
struct 结构体名称 {
数据类型 成员变量1;
数据类型 成员变量2;
// ...
数据类型 成员变量n;
};
在定义结构体时,我们需要指定结构体的名称,并列举其中的成员变量及其类型。这些成员变量的定义方式和声明普通变量的方式相同。
如何使用结构体?
定义好结构体之后,我们可以声明一个或多个该类型的变量,并使用.
运算符来访问其中的成员变量。例如:
#include <stdio.h>
struct Student {
char name[20];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 18, 90.5}; // 初始化结构体变量
struct Student stu2; // 声明结构体变量
stu2 = stu1; // 结构体变量之间可以直接赋值
printf("%s的年龄是%d,成绩是%.1f\n", stu1.name, stu1.age, stu1.score);
printf("%s的年龄是%d,成绩是%.1f\n", stu2.name, stu2.age, stu2.score);
stu2.age = 19; // 可以单独修改结构体中的某个成员变量
printf("%s的年龄是%d\n", stu2.name, stu2.age);
return 0;
}
在上面的代码中,我们定义了一个Student
结构体,包含名字、年龄和成绩三个成员变量。在main
函数中,我们声明了两个该类型的变量stu1
和stu2
。我们使用了初始化的方式为stu1
变量的成员变量赋值,然后使用赋值操作符将stu1
的值赋给stu2
,这说明结构体变量之间完全可以实现赋值操作。
我们使用.
运算符可以访问结构体变量中的每一个成员变量。例如,在上面的代码中,使用stu1.name
可以获取stu1
变量的名字属性,使用stu2.age
可以获取stu2
变量的年龄属性。我们还可以通过单独修改某个成员变量来修改结构体中的数据。
结构体示例1:计算图形面积
下面通过一个示例来说明如何使用结构体计算图形的面积。
首先,我们定义表示三角形、矩形和圆形的结构体:
struct Triangle {
float bottom;
float height;
};
struct Rectangle {
float width;
float height;
};
struct Circle {
float radius;
};
然后,我们编写计算这些图形面积的函数:
#define PI 3.14159
float calcTriangleArea(struct Triangle t) {
return t.bottom * t.height / 2;
}
float calcRectangleArea(struct Rectangle r) {
return r.width * r.height;
}
float calcCircleArea(struct Circle c) {
return PI * c.radius * c.radius;
}
这里我们分别定义了三个计算面积的函数,分别接收一个Triangle
、Rectangle
和Circle
类型的参数,返回对应图形的面积。
最后我们在主函数中可以这样调用这些函数:
int main() {
struct Triangle t = {3, 4};
struct Rectangle r = {5, 6};
struct Circle c = {2};
printf("三角形的面积是%.2f\n", calcTriangleArea(t));
printf("矩形的面积是%.2f\n", calcRectangleArea(r));
printf("圆形的面积是%.2f\n", calcCircleArea(c));
return 0;
}
在这段代码中,我们声明了三个图形变量t
、r
、c
,并传递给上面定义的三个函数进行面积计算。
结构体示例2:分离整数的小数部分和整数部分
下面我们通过一个示例来说明如何使用结构体将一个实数分解成小数部分和整数部分。
首先,我们定义一个名为Number
的结构体:
struct Number {
int integerPart;
int decimalPart;
};
然后,我们编写一个接收一个实数参数,将其分解成整数部分和小数部分,放入Number
结构体中返回的函数:
struct Number splitNumber(float num) {
struct Number result;
result.integerPart = (int)num;
result.decimalPart = (int)((num - result.integerPart) * 100);
return result;
}
在这个函数中,我们首先定义了一个名为result
的Number
类型的变量。然后,我们先通过强制类型转换获取该实数的整数部分,将其存入integerPart
成员变量中。接着,我们将实数减去整数部分,就可以获得小数部分,这里我们将其乘以100并强制转化为int
类型后再将其存入decimalPart
成员变量中。最后,我们将result
返回。
我们在主函数中可以这样调用这个函数:
int main() {
struct Number n = splitNumber(3.14159);
printf("3.14159的整数部分是%d,小数部分是%d\n", n.integerPart, n.decimalPart);
return 0;
}
我们传入一个实数3.14159来调用splitNumber
函数,可以得到返回值中的整数部分是3,小数部分是14。
结束语
通过上面的示例,我们可以看到结构体在C语言中的强大之处,可以将不同类型的变量组合成一个整体是非常方便的。但需要注意的是,结构体的创建时需要预留足够的内存空间,不然会导致内存溢出,所以使用时需要谨慎一些。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 结构体(Struct)详解及示例代码 - Python技术站