结构体总结

一、结构体:不同数据类型的集合(区别数组:同一类型数据的集合)

#include<stdio.h>

#include<string.h>

struct student//struct 是结构体关键字,student是结构标记 struct student结构体类型名字,不会分配空间,类似int float

 

{

    int age;//student 类型结构体的成员

    char name[20];

    char sex;

}stu1,stu2;//结构体变量,不能将结构体变量变量作为整体输出,输入。

void main()

{

    stu1.age = 20;

    //stu1.name = 'm';error,成员访问符不能进行数组访问,只能访问数字或字符

    strcpy(stu1.name ,"Liu");//若要访问字符串可以用strcpy函数进行赋值。

    stu1.sex = 'm';

    struct student stu1 ={19, "dsld"};//对整个结构体进行初始化必须一一对应赋值,不能省缺。

    struct student stu2 = {20,"nihao"};

}

定义结构体有三种方式:

a.先定义结构体类型,再定义结构体变量赋值

struct student

{

...

};

struct student stu1,stu2;

b.定义结构体类型的同时,就定义结构体变量

struct student

{

}stu1,stu2;

c.可以不定义类型名,直接定义结构体变量

struct

{

...

}stu1,stu2;

 

1.结构体类型定义结束后,才可对结构体变量进行初始化。不能给结构体类型成员初始化。

2.不能对结构体变量进行输入输出操作,只能对成员进行操作用成员访问符(.)进行操作。

3.结构体类型不会分配内存,结构体变量才会分配内存(类型int a =5;int实际不占内存,变量a占四个字节)。

4.对结构体可以各个赋值,也可以整体赋值。各个赋值可以每个成员赋值,整体赋值必须一一对应。

若各个赋值必须注意对字符串的赋值,要调用strcmp函数。

strcmp(char1,"char2")---->该函数比较两个字符串,相等返回0char1>char2返回>0的数 char1<char2返回小于0的数。

strcpy(stu1.name ,"Liu");-->该函数是字符串copy函数,把Liu 复制给stu1.name

strcat(char1,"char2");--->该函数是字符串catnate函数,把char2连接在char1后面。

5.定义数组封号不能少。

6.%2d,输出有效字符数为2,右对齐。%-3d,左对齐。

二、结构体数组

1.其定义和结构体定义一样(3种)

struct student

{

}stu[3];

对其中元素引用strcpy(stu[0].name, "liu");

2.指向结构体变量的指针

struct student

{}stu[3];

 

struct student* p;

p = &stu[0];

 

注意:p要指向结构体数组成员的成员要进行强制类型转换、

p = (struct student *)stu[0];

 

三、联合体也叫共用体 union

1.不同的数据类型"共享"一个区域内存,它采用了覆盖技术,允许不同数据类型覆盖,但不能同时处理所有成员,每一瞬间只能处理一种类型数据,占用内存,按占字节最大者开辟空间。

2.改变其中一种类型的值,可能影响到其他类型成员。

union stu

{

    char a;

    int b;

}stu1;

void main()

{

stu1.a ='A';

    stu1.b++;

    printf("A' = %c",stu1.a);//A'= B

}

四、枚举类型enum

1.enum :是数据类型,而不是构造数据类型

定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内

enum <枚举标记> {枚举常量1,枚举常量2。。。。。}

五、typedef :

1.typedef:用户自定义类型说明符(关键字)

typedefchar NAME[20];

NAME a;//等价于char a[20];NAME是一个字符数组类型,并且字符大小为20字节,然后用NAME 定义变量。

2.typedef是给已有数据类型取"别名",可以是intfloat,可以是结构体,通常为大写字母,以封号结尾。

typedefint INTEGER;//int 型定义成INTEGER, 所以 INTEGER a = 5等价于 inta=5;

typedeffloat PEAL;

typedefunion

{

    char a;

    int b;

}STU,*PORT;

//union定义成STU1,所以STU stu1 等价于 union stu stu1;

//union定义成* PORT,所以PORT stu2等价于union student *stu2

3.typedef#define的区别,#define是个字符串起个别名,typedef是个数据类型取别名,但两者有本质差别。

#define MAX_SIZE 5//没有封号宏定义

typedefint INTEGER;//必须加封号类型定义

INTEGER num;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值