结构体的声明
结构体:一些值的集合,每一个元素都有自己的名字/每一个成员可以是不同类型的变量。
结构的声明
struct tag//关键字+标签
{
member-list;//成员列表
}variable-list;//变量
注意:
1.标签尽量不要省略,见名知意;
2.成员列表不能全部
省略;
3.变量可以
省略。
特殊的声明:不完全声明
struct
{
int a;
char b;
float c;
}x;
struct
{
int a;
char b;
float c;
}a[20],*p;
注意:编译器会把上面的两个声明当成完全不同的两个类型(类型不兼容),即一个结构体是一个类型,哪怕其内容完全相同。
结构的成员
结构的成员可以是标量、数组、指针,甚至是其他结构体。
结构体成员的访问
1.点操作符 (.)
struct S
{
char name[20];
int age;
}s;
void print(struct S* ps)
{
printf("name = %s age = %d\n",(*ps).name,(*ps).age);
}
2.指向操作符(->)
struct S
{
char name[20];
int age;
}s;
void print(struct S* ps)
{
printf("name = %s age = %d\n",(ps->name,ps->age);
}
结构体的自引用(链表结构)
struct node
{
int date;
struct node* next;//包含自己的指针变量(定义结构体指针)
};
注意:typedef---定义新类型
typedef struct node
{
int data;
struct node* next;
}node_t,*node_p,**node_p;
int main()
{
node_t n;
node_p p=&n;
node_pp pp=&n;
}