数据经常以成组的形式存在,我们通常会用到数组,而当这些值的类型不同时,数组便无能为力了,这是就需要结构体来进行存储,在C语言中,结构体可以把不同类型的数组存储在一起。
## 结构体基础知识
结构体和数组一样,也是一些值的集合,这些值成为它的成员,但一个结构体的各个成员可能具有不同的类型。
由于结构体成员的类型可能不同,所以并不能像数组一样通过下标进行访问,但是,结构体中的每个成员都有自己的名字,它们可以通过名字访问。
### 结构体声明
在声明结构体时,必须列出它包含的所有成员,这个列表包括成员的类型和名字。
struct Stu
{
char name[20];
int age;
char sex[10];
}S;
这便创建了一个名S的struct Stu类型的结构体对象,结构体允许多个对象使用同一个结构体类型那么当需要创建多个同类型的对象时该怎么使用呢?
struct Stu
{
char name[20];
int age;
char sex[10];
}S,A,B,C;
需要用一个类型创建多个对象时,在对象名字后面加逗号,后跟需要继续创建的对象名字即可
###结构体成员
结构体成员可以是标量、数组、指针甚至是其他结构。
struct Stu
{
char name[20];
int age;
char *p;
}S;
一个结构成员的名字可以和其他结构的成员名字相同,成员的访问方式会允许你指定任何一个成员而不至于产生歧义。
###成员结构的访问
结构体变量的成员是通过点(.)操作符来进行访问的。点操作符接受两个操作数,左边的操作数就是结构体变量的名字,右边的操作数就是需要访问的成员的名字。这个表达式的结果就是指定的成员。
如下代码所示:
struct Stu
{
char name[20];
int age;
char sex[10];
}S;
int main()
{
S.age = 10;
printf("%d",S.age);
return 0;
}
名字为age的成员,所以S.age就表示这个成员,你可以对他进行一系列操作。
###结构体成员的间接访问
如果你拥有一个指向结构体的指针,该如何访问它的成员呢?
首先要对指针执行间接访问操作,使你获得这个结构体,然后用点操作符来访问它的成员。但是,这里需要注意的一点是,点操作符的优先级高于间接访问操作符,所以需要在表达式中使用括号(),确保简介访问首先执行。
可以用(*p).age来进行访问
同时C语言提供了另一种更为方便直观的间接访问结构体内成员的操作符 ” -> “
可以通过p->age的方式来访问。
代码如下:
struct Stu
{
char name[20];
int age;
char *p;
}S;
int main()
{
struct Stu * p=&S;
printf("%d",(*p).age);
printf("%d", p->age);
return 0;
}
个人感觉C语言的结构体为面向对象的语言打下了不可磨灭基础,能够很好理解结构体的概念与形式,就可以相对容易的学习类和对象的概念。这里只做初级入门时所用到功能的详解,结构体内所涵盖的知识还有很多,还请各路大神多多指教。