C语言结构体函数指针
时间: 2025-01-04 08:30:08 浏览: 11
### C语言中的结构体与函数指针
#### 定义并初始化结构体
在C语言中,`struct`关键字用于定义结构体。下面的例子展示了如何创建一个表示学生信息的结构体:
```c
#include <stdio.h>
// 定义结构体
struct student {
char* name;
int id;
int age;
char group;
float grade;
};
int main() {
// 初始化单个结构体变量
struct student stu1 = {"Alice", 2023001, 20, 'B', 95.5};
// 打印结构体成员
printf("Name: %s\nID: %d\nAge: %d\nGroup: %c\nGrade: %.2f\n",
stu1.name, stu1.id, stu1.age, stu1.group, stu1.grade);
}
```
上述代码片段说明了怎样声明一个新的结构体型以及为其分配具体的值[^1]。
#### 创建指向结构体的指针
为了更灵活地操作数据,可以利用指针访问结构体的内容。这里给出了一种方式来设置和获取由指针所指向的对象属性的方法:
```c
// 继续上面的例子...
// 声明指向student类型的指针pstu并将它赋给stu1地址
struct student * pstu = &stu1;
printf("Using pointer to access:\n");
printf("Name via ptr: %s\n", (*pstu).name); // 方式一:解引用运算符(*)
printf("ID via ptr: %d\n", pstu->id); // 方式二:箭头运算符(->),推荐这种方式因为简洁直观
```
这段程序进一步解释了通过指针对结构体内存位置的操作手段[^2]。
#### 将函数指针作为结构体成员
除了基本的数据字段外,还可以把函数指针加入到结构体里,从而实现面向对象编程风格的功能绑定效果。考虑如下场景——我们希望每个学生都有自己的学习计划执行方法,则可以在设计之初就预留好相应的接口:
```c
typedef void (*study_plan)(void);
struct student_with_func_ptr {
char* name;
study_plan plan; // 添加函数指针成员
};
void morning_study(void){
puts("Morning routine...");
}
void evening_review(void){
puts("Evening review session.");
}
int main(){
// 实例化带不同行为的学生实体
struct student_with_func_ptr s1 = {"Bob", morning_study},
s2 = {"Charlie", evening_review};
// 调用各自的学习规划方案
s1.plan();
s2.plan();
return 0;
}
```
此部分阐述了将特定功能封装成独立子程序并通过函数指针关联至相应主体的技术细节[^3]。
阅读全文