吹泡泡的小鱼的个人空间 https://blog.eetop.cn/layoutart [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

C语言的数据类型(基础类型+结构体)

已有 1019 次阅读| 2019-10-12 10:24 |个人分类:C|系统分类:嵌入式| C语言, 数据类型

数据类型:用于声明不同类型的变量和函数
变量的类型决定了变量存储占用的空间以及如何解释存储的位模式。
(一)基础类型
1)整型: int    unsigned  int
          short   unsigned  short
          long    unsigned  short
2)浮点型:float  double  long double
3)字符型:char  unsigned char  signed char
(二)派生类型
结构体(stuct),结构体数组,结构体指针,共用体,枚举类型(enum),空类型
1)结构体(struct):结构体本质上是一种编程者自定义的数据类型,这不过这种数据类型相对复杂,它是由int char float等基础类型组成的。可以认为结构体是一种基础类型的聚合类型。
格式:struct 结构体名{ 结构体所包含的变量或数组 };
例如:对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};
2)结构体数组:是指数组中的每个元素都是一个结构体,在实际应用中,通常用来表示一个拥有相同数据结构的群体。
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}class[5] = {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
当对数组中全部元素赋值时,也可不给出数组长度,例如:
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}class[] = {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
结构体数组的使用也很简单,例如,获取 Wang ming 的成绩:
class[4].score;
修改 Li ping 的学习小组:
class[0].group = 'B';

3)结构体指针:当一个指针变量指向结构体时,我们就称它为结构体指针。
格式:struct 结构体名 *变量名;
例如:
//结构体
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//结构体指针
struct stu *pstu = &stu1;
也可以在定义结构体的同时定义结构体指针:
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,
所以给 pstu 赋值只能写作:
struct stu *pstu = &stu1;
而不能写作:
struct stu *pstu = stu1;
还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:
struct stu *pstu = &stu;
struct stu *pstu = stu;

4)枚举(enum):
格式:enum  枚举名 {枚举元素1,枚举元素2,······};
例如:一个星期有7天,如果不用枚举,我们需要#define 来为每个整型定义一个别名
#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7
这样的代码比较麻烦,如果用枚举就简单多了
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
!注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

未完待续······


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 6

    关注
  • 87

    粉丝
  • 29

    好友
  • 96

    获赞
  • 45

    评论
  • 11231

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-10 06:56 , Processed in 0.026756 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部