嵌入式学习小组
直播中

朱瑞平

8年用户 225经验值
私信 关注

C语言的数据类型有哪些?

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


回帖(5)

余姗姗

2020-12-25 14:29:01
基础类型
1)整型: int    unsigned  int
          short   unsigned  short
          long    unsigned  short
2)浮点型:float  double  long double
3)字符型:char  unsigned char  signed char
举报

朱志兴

2020-12-25 14:29:09
派生类型
结构体(stuct),结构体数组,结构体指针,共用体,枚举类型(enum),空类型

1)结构体(struct):结构体本质上是一种编程者自定义的数据类型,这不过这种数据类型相对复杂,它是由int char float等基础类型组成的。可以认为结构体是一种基础类型的聚合类型。
格式:struct 结构体名{ 结构体所包含的变量或数组 };

例如:对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};
举报

王飞

2020-12-25 14:29:19
结构体数组:是指数组中的每个元素都是一个结构体,在实际应用中,通常用来表示一个拥有相同数据结构的群体。
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';
举报

周莹

2020-12-25 14:29:32
结构体指针:当一个指针变量指向结构体时,我们就称它为结构体指针。
格式: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;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分