/*结构体形式 struct 结构体名 变量
结构体变量定义的三种形式
struct student
{
变量类型 成员1;(成员也可以是数组)
...
变量类型 成员n;
};//一定要有分号
struct student stu(变量);变量可以是多个
struct student
{
变量类型 成员1;(成员也可以是数组)
...
变量类型 成员n;
}stu1,stu2;
struct
{
变量类型 成员1;(成员也可以是数组)
...
变量类型 成员n;
}stu1,stu2;
*/
int main(int argc, char *argv[]) {
struct
{
char name[20];
char xb;
int age;
float cj;
}stu1,stu2;
strcpy(stu1.name,"zhangsan");
stu1.xb = 'm';
stu1.age = 19;
stu1.cj = 89.5;
printf("%s
%c
%d
%.1f
",stu1.name,stu1.xb,stu1.age,stu1.cj);
strcpy(stu2.name,"lisi");
stu2.xb = 'w';
stu2.age = 17;
stu2.cj = 79.5;
printf("%s
%c
%d
%.1f
",stu2.name,stu2.xb,stu2.age,stu2.cj);
struct student
{
char name[20];
char xb;
int age;
float cj;
};
struct student stu;
strcpy(stu.name,"wangwu");
stu.xb = 'm';
stu.age = 20;
stu.cj = 99.5;
printf("%s
%c
%d
%.1f",stu.name,stu.xb,stu.age,stu.cj);
return 0;
}
运行结果
strcpy功能 strcpy(参数1,参数2); //将参数2复制到参数1内仅适用于字符串复制
strcat功能 strcat(参数1,参数2); //将参数2的值打印到参数1后
strlen功能 //获取字符串的长度 例如:char k[20] = "ajfkdfkjdk"; int i; i = strlen(k); printf("%d",i); //结果为10
char k[20];
scanf("%s",&k);
int i;
i = strlen(k);
printf("%d",i);
运行结果
typedef函数
函数形式 typedef 原函数类型 新函数类型//相当于将新函数类型等价于原函数类型
如:
typedef int inter;
inter i = 10;
int j = 5;
printf("%d
",i);
printf("%d",j);
运行结果
int main(int argc, char *argv[]) {
typedef struct stu //stu可有可无
{
char name[20];
char xie;
int age;
}student;
student a; //定义结构体变量a
strcpy(a.name,"lisi");
a.xie = 'm';
a.age = 13;
printf("%s
%c
%d
",a.name,a.xie,a.age);
return 0;
}
运行结果
//结构体的嵌套
int main(int argc, char *argv[]) {
struct cade
{
int yuwen;
int shuxue;
int yinyu;
};
struct person
{
char name[20];
int age;
struct cade cj; //将结构体struct cade嵌套到结构体struct person中
};
struct person basic = {
"xiaoming",19,{89,85,92},
};
printf("%s
%d
%d
%d
%d",basic.name,basic.age,basic.cj.yuwen,basic.cj.shuxue,basic.cj.yinyu);
return 0;
}
运行结果
结构体指针
int main(int argc, char *argv[]) {
typedef struct stu
{
char name[20];
char xb;
int age;
}student;
student a = {"wangwu",'m',19};
student *p = &a;
printf("%s %c %d
",(*p).name,(*p).xb,(*p).age);
printf("%s %c %d
",p->name,p->xb,p->age); //(p->)相当于((*p).);
//可以对结构体里面的内容进行修改 如下(未使用结构体指针时也可以对结构体里面的内容进行修改 直接修改就行)
strcpy(p->name,"zhangsan");
p->xb = 'f';
p->age = 50;
printf("%s %c %d
",(*p).name,(*p).xb,(*p).age);
return 0;
}
运行结果
枚举类型
int main(int argc, char *argv[]) {
enum color{red,green,black,blue};//枚举类型 ,在第二个变量之后不能将其赋值为1,因为在第二个变量之前的数不能为负数,也可以不对变量进行赋值,那么默认值为0开始,依次加1
int icolor;
scanf("%d",&icolor);//根据输入的数字进行判断
switch(icolor)
{
case red:
printf("this is red
");
break;
case green:
printf("this is green
");
break;
case black:
printf("this is black
");
break;
case blue:
printf("this is blue
");
break;
default:
printf("???
");
break;
}
return 0;
}
运行结果
共用体
int main(int argc, char *argv[]) {
//共用体的大小是所包含的数据成员中最大内存长度的大小
union student //共用体也称联合体,定义变量可以与结构体的一样 ,共用体定义的是一块为所有数据成员共享的内存
{
int age;
char u;
};
union student a;
a.age = 65; //共用体只需初始化一个变量就够了,但其类型必须和共用体的第一个成员的类型一致,如第一个成员的是整型的,那么初始化的这个变量也必须是整型的
printf("%d
",a.age);
printf("%c
",a.u); //改变共用体的一个成员其他的成员也会随之改变
return 0;
}