精通C语言结构体:定义、变量、访问与进阶示例
精通C语言结构体
通过清晰示例和最佳实践,学习如何定义、创建和使用C语言结构体。
什么是C语言结构体?
struct(结构体简称)是一种复合数据类型,将不同类型的变量归组在一个名称下。它是C语言创建复杂数据结构的基础。
定义结构体
创建结构体变量前必须先定义类型。struct 关键字引入定义:
struct structureName {
dataType member1;
dataType member2;
…
};
示例:
struct Person {
char name[50];
int citNo;
float salary;
};
这创建了名为 struct Person 的新类型,现可声明该类型变量。
创建结构体变量
定义结构体类型不分配内存。使用时需声明变量:
struct Person {
// 成员
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
也可合并定义和变量声明:
struct Person {
// 成员
} person1, person2, p[20];
person1和person2是单个struct Person变量。p是 20 个struct Person实例的数组。
访问结构体成员
两个运算符访问成员:
.– 成员访问运算符。->– 指向结构体指针的成员运算符(另见教程)。
读写 person2 的 salary:
person2.salary
示例 1:在C中使用结构体
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int citNo;
float salary;
} person1;
int main() {
strcpy(person1.name, "George Orwell");
person1.citNo = 1984;
person1.salary = 2500;
printf("Name: %s\n", person1.name);
printf("Citizenship No.: %d\n", person1.citNo);
printf("Salary: %.2f", person1.salary);
return 0;
}
输出
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
注意 strcpy() 将字符串复制到固定大小 char 数组,因数组不能直接用赋值运算符。
结构体配合 typedef 使用
typedef 为类型创建别名,简化声明:
typedef struct Distance {
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
无 typedef 时需写:
struct Distance d1, d2;
示例 2:别名实战
#include <stdio.h>
#include <string.h>
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;
int main() {
person p1;
strcpy(p1.name, "George Orwell");
p1.citNo = 1984;
p1.salary = 2500;
printf("Name: %s\n", p1.name);
printf("Citizenship No.: %d\n", p1.citNo);
printf("Salary: %.2f", p1.salary);
return 0;
}
输出
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
嵌套结构体
结构体可包含其他结构体,实现层级数据建模:
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
将 num2 的 imag 设为 11:
num2.comp.imag = 11;
示例 3:嵌套结构体实战
#include <stdio.h>
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
num1.comp.imag = 11;
num1.comp.real = 5.25;
num1.integer = 6;
printf("Imaginary Part: %d\n", num1.comp.imag);
printf("Real Part: %.2f\n", num1.comp.real);
printf("Integer: %d", num1.integer);
return 0;
}
输出
Imaginary Part: 11 Real Part: 5.25 Integer: 6
为何在C中使用结构体?
假设需存储姓名、公民编号和薪水。无结构体时,每人需为每字段创建单独变量,迅速导致代码重复混乱。结构体将相关数据封装为单一逻辑单元,提升代码清晰度和可维护性。
后续学习
- 结构体与指针
- 向函数传递结构体
C语言