一 结构的声明
结构是一些值的集合,这些值称为成员变量,结构的每一个成员可以是不同类型的变量
struct Stu
{
char name[20];
int age;
float score;
}s1,s2;//s1 s2是全局变量
int main()
{
int a=0;
int b=0;
struct Stu s;//定义一个结构体变量,是局部变量
}
二 结构体成员的类型
结构体成员可以是标量,数组,指针,甚至是其他的结构体
三 结构体变量的定义和初始化
struct Point
{
int x;
int y;
}p1;//声明类型的同时定义变量p1
struct
struct Point p2;//定义结构体变量p2
struct Point p3={1,2};//定义结构体变量p3并初始化
{
char name[20];
int age;
};
struct Stu s={"zhangsan",20};//初始化
struct Node
{
int data;
struct Point p;
struct Node*next;
}n1={10,{4,5},NULL;//结构体嵌套初始化
struct Node n2={20,{5,6},NULL};//结构体嵌套初始化
四 结构体成员访问
结构体成员访问要借助操作符 . 或 ->
#include<stdio.h>
struct S
{
int a;
char c;
double d;
};
struct Stu
{
struct S ss;
char name[20];
int age;
float score;
};
int main()
{
struct Stu s={{100,'w',3.14},"zhangsan",20,95.95f};
printf("%d %c %f %s %d %f\n",s.ss.a,s.ss.c,s.ss.d,s.name,s.age,s.score);
return 0;
}
五 结构体传参
1 传值调用
#include<stdio.h>
struct S
{
int arr[1000];
float f;
char ch[100];
};
void print1 (struct S tmp)
{
int i=0;
for(i=0;i<10;i++)
{
printf("%d ",tmp.arr[i]);
}
printf("\n");
printf("%f\n",tmp.f);
printf("%s\n",tmp.ch);
}
int main()
{
struct S s={{1,2,3,4,5,6,7,8,9,10},5.5f,"hello bit"};
print1(s);
return 0;
}
2 传址调用
#include<stdio.h>
struct S
{
int arr[1000];
float f;
char ch[100];
};
void print2 (struct S* ps)
{
int i=0;
for(i=0;i<10;i++)
{
printf("%d ",ps->arr[i]);
}
printf("\n");
printf("%f\n",ps->f);
printf("%s\n",ps->ch);
}
int main()
{
struct S s={{1,2,3,4,5,6,7,8,9,10},5.5f,"hello bit"};
print2(&s);
return 0;
}