人生的胜者决不会在挫折面前失去勇气。
定义
关键字:struct
语法1(推荐)
struct 结构体名称
{
成员:一个结构体可以有多个成员
};
语法2:定义结构体的时候顺便定义一个结构体变量
struct 结构体名称
{
成员:一个结构体可以有多个成员
}变量名;
语法3:一个结构体只定义一个结构体变量
struct
{
成员:一个结构体中可以有多个成员
}变量名;
初始化结构体
方式1
语法
struct 结构体名称 结构体变量名 = {值1,值2,值三3...}
注意
1.定义结构体变量与初始化不能分开
2.值的顺序就是结构体中成员的顺序
示例
方式2
语法
结构体变量名1 = 结构体变量名2;
方式3
语法
memcpy(结构体变量名1的地址,结构体变量名2的地址,长度)
方式4
示例
struct ppp
{
char name[50];
int age;
char jiax[20];
};
void fun01()
{
//方式1
struct ppp p1 = {"张三",18,"兰州" };
//方式2
struct ppp p2;
scanf("%s %d %s",p2.name,&p2.age,p2.jiax);
//方式3
struct ppp p3;
strcpy(p3.name,"王五");
p3.age = 23;
strcpy(p3.jiax,"重庆");
printf("%s %d %s\n",p1.name,p1.age,p1.jiax);
printf("%s %d %s\n",p2.name,p2.age,p2.jiax);
printf("%s %d %s\n",p3.name,p3.age,p3.jiax);
}
结构体成员使用
取值
结构体变量名.成员名
赋值
基本数据类型
结构体变量名.成员名 = 值;
字符数组
strcpy(结构体变量名.成员名,值);
typedef与结构体
作用:简化定义结构体变量
语法
typedef struct 结构体名称
{
成员
}别名;
示例
typedef struct ppp
{
char name[50];
int age;
}p;
void fun01()
{
p p1 = {"张三",18};
p p2;
strcpy(p2.name,"李四");
p2.age = 20;
printf("%s %d\n",p1.name,p1.age);
printf("%s %d\n",p2.name,p2.age);
}
结构体嵌套
概念:结构体A成员是结构体B的变量
结构体与指针
结构体指针
概念:指向结构体变量的指针
定义语法
struct 结构体名称 *指针变量名;
或
别名 *指针变量名;
操作成员
将.换为->即可
示例
typedef struct ppp
{
char name[50];
int age;
}P;
void fun01()
{
P x = {"张三",20};
struct ppp *x1 = &x;
P *x2 = &x;
x.age = 25;
printf("%d\n",x.age);
x1->age = 30;
printf("%d\n",x1->age);
strcpy(x.name,"李四");
printf("%s\n",x.name);
strcpy(x1->name,"王五");
printf("%s\n",x2->name);
}
示例2:堆区开辟内存存储 结构体变量
void fun01()
{
P *p1 = (P *)calloc(1,sizeof(P));
if (p1 == NULL)
{
printf("开辟失败");
return;
}
memset(p1,0,sizeof(P));
strcpy(p1->name,"张三");
p1->age = 20;
printf("%s %d\n",p1->name,p1->age);
if (p1 != NULL)
{
free(p1);
p1 =NULL;
}
}
void fun02()
{
P *p1 = (P *)calloc(1,sizeof(P));
if (p1 == NULL)
{
printf("开辟失败");
return;
}
memset(p1,0,sizeof(P));
scanf("%s %d",p1->name,&p1->age);
printf("%s %d\n",p1->name,p1->age);
if (p1 != NULL)
{
free(p1);
p1 =NULL;
}
}
结构体中成员为指针变量
概念
结构体的成员指针变量