第七章-结构体

一、结构体类型的声明

1.  结构

结构是一些值的集合,这些值称为成员变量。

结构的每个成员可以是不同类型的变量。

2.结构的声明

#include<stdio.h>
//描述学生
//struct--结构体关键字
//stu-结构体标签
//struct Stu--结构体类型
//定义一个结构体类型
struct Stu
{
    //成员变量
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}s1, s2, s3;//分号不能丢
//s1,s2,s3是三个全局的结构体变量
//创建结构体变量
int main()
{
    struct Stu s;//局部结构变量
    return 0;
}
#include<stdio.h>
typedef struct Stu
//typedef重新起名字Stu
{
    //成员变量
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}Stu;
//Stu为变量
int main()
{
    struct Stu s1;//局部结构变量
    Stu s2;//不用申请struct
    return 0;
}

二、结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

数组的成员,必须是相同类型的元素

 

三、结构体变量的定义和初始化

#include<stdio.h>
typedef struct Stu
{
    char name[20];
    int age;
    char tele[12];
    char sex[5];
}Stu;
int main()
{
    struct Stu s1 ={"张三", 20,"123456789123",""};//初始化
    Stu s2 = { "张三", 20,"123456789123","" };
    return 0;
}
#include<stdio.h>
struct S
{
    int a;
    char c;
    char arr[20];
    double d;
};
struct T
{
    char ch[10];
    struct S s;
    char *pc;
};
int main()
{
    char arr[] = "hello bit\n";
    struct T t = { "hehe",{100,'w',"hello world",3.14},arr};
    printf("%s\n", t.ch);//hehe
    printf("%s\n", t.s.arr);//hello word
    printf("%lf\n", t.s.d);//3.140000
    printf("%s\n", t.pc);//hello bit
    return 0;
}

四、结构体成员访问、结构体传参

#include<stdio.h>
typedef struct Stu
{
    char name[20];
    int age;
    char tele[12];
    char sex[5];
}Stu;
void Print1(Stu tmp)
{
    printf("name:%s\n", tmp.name);
    printf("age:%d\n", tmp.age);
    printf("tele:%s\n", tmp.tele);
    printf("sex:%s\n", tmp.sex);
}
void Print2(Stu* ps)
{
    printf("name:%s\n", ps->name);
    printf("age:%d\n", ps->age);
    printf("tele:%s\n", ps->tele);
    printf("sex:%s\n", ps->sex);
}
int main()
{
    Stu s = { "张三", 40,"123456789123","" };
    //打印结构体数据
    //Print1和Print2
    //首选print2函数
    //函数传参的时候,参数是需要压栈的。
    //如果传递一个结构体对象的时候,结构体过大,
    //参数压栈的的系统开销比较大,所以会导致性能的下降
    //结构体传参的时候,要传结构体的地址。
    Print1(s);
    Print2(&s);
    return 0;
}

 

posted @ 2021-11-08 21:41  mljrm  阅读(37)  评论(0)    收藏  举报