C语言结构体

每一个变量(或元素)都是由基本类型复合而成的多类型。C 语言中允许用户在程序里
自己构建程序所需要的这种类型——由基本类型复合而成的类型,在 C 语言里称为结构体
(structure)类型。
结构体类型的构建及结构体变量的定义

  1. 结构体类型的构建
    构建一个结构体类型的一般形式为:
    struct 类型名
    { 数据类型 成员名 1;
    数据类型 成员名 2; ……
    数据类型 成员名 n;
    };
    构建通讯录问题所需要的结构体类型。
    struct info /通讯录类型/
    { char name[50]; /姓名/
    int year; //
    int month; //
    int day; //
    char email[100]; /电子邮箱/
    char mobile_num[12];
    在这里插入图片描述
    2.结构体变量的定义
    结构体变量定义的一般形式:struct 类型名 变量名表列;
    在这里插入图片描述
    两个定义相比较得:struct info 相当于 int 的地位,二者都是类型,只不过 struct info 是结
    构体类型,是一种复合类型,而 int 是基本类型。
    用所构建的 struct info 类型定义 a、b、c 三个变量,以备存储王晓明、李大伟和张欣欣
    三个好友的资料。
    struct info a;
    struct info b;
    struct info c;
    或:
    struct info a,b,c;
    构建结构体类型 struct info 的同时定义 struct info 类型的变量 a、b 和 c。
    struct info
    { char name[50];
    int year; int month;
    int day; char email[100];
    char mobile_num[12];
    }a,b,c;
    上面定义中的类型名”info”可以省略不写:
    3.结构体变量的使用
    1).结构体变量成员的引用
    结构体变量的成员需要通过分量运算符”.”来引用。
    引用格式:结构体变量.成员名
    给所定义的变量 a 赋值并输出:
    strcpy( a.name,“王晓明”);
    a.year=1988;a.month=5;a.day=16;
    strcpy(a.email,“wxm1988@abc.com”);
    strcpy(a.mobile_num, “19801020304”);
    2).结构体变量之间的赋值
    结构体变量之间可以直接赋值,而不必用分量运算符一个一个地赋值。
    struct student b;
    b=a; ……
    3).结构体变量的初始化
    有两种方式:
    用赋值语句逐一对结构体变量成员赋值。定义结构体变量的同时为结构体变量指定
    初始值。
    struct info 类型定义变量 a,并初始化。
    struct info a={“王晓明”,1988,5,16,“wxm1988@abc.com”, “19801020304”};
    4.自定义类型
    typedef 声明新的类型名来代替已有的类型名。
    例如:typedef int INTEGER;
    则可以用:
    INTEGER a; /*等价于 int a; */
    typedef struct
    {
    int c_lang;
    int english;
    }score;
    typedef struct BiTNode{
    int data;
    struct BiTNode *lchild,*rchild;
    }BiTNODE,*biTree;
    BiTNODE head;
    biTree phead;
    5.结构体指针 引用结构体指针指向的结构体变量的成员
    1).结构体指针变量的定义 结构体指针变量定义形式:
    struct 结构体类型名 *变量, *变量,……;
    2).利用结构体指针引用指向的结构体变量的成员
    引用格式:结构体指针变量->成员 或:(*结构体指针变量).成员
    main( )
    { struct student
    { long int num;
    char name[20];
    char sex;
    float score;
    }stu_1, *p;
    p=&stu_1;stu_1.num=89101;
    strcpy(stu_1.name,“Li Lin”);
    p->sex=‘M’; p->score=89.5;
    printf(“\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n”, (p).num, p->name, stu_1.sex, p->score);
    }
    6、利用 malloc()和 free()两个函数动态分配和释放内存空间
    1)内存分配函数 malloc()
    格式为: malloc(size)
    在内存中动态分配一个长度为 size 的连续空间。函数的返回值分配区域起始地址的
    指针。分配不成功 size=0,则返回空指针(NULL)。
    例如: struct node p;
    p=(struct node
    )malloc(sizeof(struct node));
    其中,(struct node
    )为强制类型转换
    2)释放内存函数 free()
    格式: free(p)
    功能:释放由 p 指向的内存区为自由空间。
    注意:指针 p 必须是经过动态分配函数 malloc 成功后返回的首地址。
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值