C语言结构体与指针操作详解

需积分: 14 0 下载量 193 浏览量 更新于2024-07-14 收藏 705KB PPT 举报
"C语言中的结构体和指针是编程中重要的数据结构,它们允许我们组织和操作复杂的数据。结构体可以包含多个不同类型的成员,如整型、字符型、浮点型等,而指针则能指向这些结构体变量,从而实现对结构体成员的间接访问。" 在C语言中,结构体是复合数据类型,它允许我们将不同类型的数据组合到一起形成一个新的数据类型。定义结构体的基本语法是: ```c struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ... }; ``` 例如,定义一个`student`结构体,包含学号(`num`)、姓名(`name`)、性别(`sex`)和分数(`score`): ```c struct student { long int num; char name[20]; char sex; float score; }; ``` 接着,我们可以创建结构体变量并初始化它们,例如: ```c struct student stu_1; stu_1.num = 89101; strcpy(stu_1.name, "Li Lin"); stu_1.sex = 'M'; stu_1.score = 89.5; ``` 也可以定义一个指向结构体的指针,如`p`,并用它来引用结构体成员: ```c struct student *p; p = &stu_1; p->sex = 'M'; // 通过指针访问结构体成员 p->score = 89.5; ``` 这里,`p->sex`和`(*p).sex`是等价的,都表示通过指针`p`访问`struct student`的`sex`成员。`*`操作符具有较高的优先级,从左向右结合,所以`(*p)`先执行解引用操作,然后访问`sex`。 结构体变量之间可以互相赋值,但需要注意,这种赋值实际上是进行一次深拷贝,即逐个复制每个成员的值。如果结构体包含嵌套结构体,那么需要递归地引用和赋值。 结构体类型还可以作为函数的参数,这样可以在函数内部修改结构体的成员。比如: ```c void update_student(struct student *s) { s->score += 1.0; } update_student(&stu_1); // 更新stu_1的分数 ``` 共用体是另一种复合数据类型,与结构体类似,但它的一个成员在任何时刻只能存储一种类型的数据。枚举类型(enum)则用于定义一组符号常量,可以看作是整型的别名。 `typedef`语句可以用来为已存在的类型创建新的别名,这在处理复杂的结构体类型时尤其有用,可以使代码更易读。例如: ```c typedef struct student { int num; char name[20]; char sex; float score; } Student; ``` 之后,我们就可以使用`Student`这个新类型来定义变量,而无需每次都写`struct`关键字。 理解和熟练运用C语言中的结构体和指针,对于编写复杂的程序至关重要,它们提供了一种有效管理和操作数据的方式。通过结构体,我们可以创建自定义的数据模型,而指针则使得我们可以灵活地访问和修改这些数据。