C语言-第七章:结构体

结构体

本章重点

  • 结构体类型的声明

  • 结构体初识化

  • 结构体成员访问

  • 结构体传参

结构体的声明

结构的基础知识

结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

结构的声明
struct tag
{
    member-list;
}variable-list;

例如描述一个学生

//描述一个学生,一些数据放在大括号里
//名字
//年龄
//电话
//性别

//struct 结构体关键字 Stu - 结构体标签  struct Stu - 结构体类型
struct Stu
{
    //成员变量,图纸
    char name[20];
    short age;
    char tele[12];
    char sex[5];
}s1,s2,s3;//;不可缺少,s1,s2,s3 是三个全局的结构体变量

int main()
{
    struct Stu;  //创建结构体变量,房子,局部变量
    return 0;
 }

用typedef定义,和上面对比一下

typedef struct Stu
{
    //成员变量,图纸
    char name[20];
    short age;
    char tele[12];
    char sex[5];
}Stu;

int main()
{
    //struct Stu s1;  //创建结构体变量,房子,局部变量
    Stu s2;
    return 0;
 }

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

结构成员的类型

可以是标量,数组,指针,甚至是其他结构体

定义和初始化

有了结构体类型,那如何定义变量,其实很简单

struct Point
{
    int x;
    int y;
}p1;  //声明类型的同时定义变量p1
struct Point p2;  // 定义结构体变量p2


//初始化:定义变量的同时赋初值
int main()
{
    Stu s1 = { "张三",20,"110","男" };
    
    return 0;
}

嵌套结构体初始化
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 world
    printf("%lf\n", t.s.d);//3.14
    printf("%s\n", t.s.pc);//hello bit
    
    return 0;
}



结构体成员的访问

打印结构体数据,传参可以传s也可以是s地址

  • 传s
typedef struct Stu
{
    //成员变量
    char name[20];
    short 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);
}



int main()
{
    Stu s = { "李四",40,"110","男" };

    Print1(s);
    return 0;
}

  • 传s地址

    typedef struct Stu
    {
        //成员变量
        char name[20];
        short age;
        char tele[12];
        char sex[5];
    }Stu;
    
    void Print2(Stu* ps)
    {
        printf("name: %s\n", ps->name);
    }
    
    
    
    int main()
    {
        Stu s = { "李四",40,"110","男" };
    
        Print2(&s);
        return 0;
    }
    
结论

结构体传参的时候,要传结构体的地址

栈区局部变量
函数的形式参数
函数调用也开辟空间
堆区动态内存分配
malloc/free
realloc
ralloc
静态区全局变量
静态变量
数据结构

——线性数据结构

  • 顺序表
  • 链表
  • 队列

——树形数据结构

  • 二叉树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值