首页 > 代码库 > GTK+2.0学习——C数据类型
GTK+2.0学习——C数据类型
一、C语言中的数据类型
1、基本类型:
说 明 |
字符型 |
短整型 |
整型 |
长整型 |
单精度浮点型 |
双精度浮点型 |
无类型 |
数据类型 |
char |
short |
int |
long |
float |
double |
void |
以上除外,还有枚举类型。
各种数据类型的长度一般如下:
说 明 |
字符型 |
短整型 |
整型 |
长整型 |
单精度浮点型 |
双精度浮点型 |
数据类型 |
char |
short |
int |
long |
float |
double |
长 度 |
1 |
2 |
4 |
4 |
4 |
8 |
2、构造类型
数组、结构体、共用体
3、指针类型
4、NULL(空类型)
=====================================================================================================
二、枚举类型
1、C中记不太清的数据类型就是枚举类型、结构体、共用体。所以需要熟悉一下。
枚举类型个人理解为如果声明一个变量为枚举类型,那么那个变量的值只能是定义改枚举类型种给定常量中的一种。有点绕,上例子:
定义枚举类型:
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};//这里的;不能掉
枚举类型变量声明:
enum DAY yesterday,today;
yesterday=MON;
today=TUE;//不能赋MON=1, TUE, WED, THU, FRI, SAT, SUN以外的值
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2、除了上面那种枚举类型还有别的定义声明方法:
eg1:enum { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} DAY; //enum后面的枚举类型名可以省略
eg2:typedef enum workday { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} workday;
workday yesterday,today;//声明枚举类型的变量
eg3:typedef enum { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} workday;
workday yesterday,today;//声明枚举类型的变量
eg4:typedef enum workday { Mon=1, Tue, Wed, Thu, Fri Sat, Sun};
workday yesterday,today;//声明枚举类型的变量
注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。
3、对枚举型的变量赋整数值时,需要进行类型转换。
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday,today,tomorrow;
yesterday = TUE;
today = (enum DAY) (yesterday + 1); //类型转换
tomorrow = 3; //错误
=====================================================================================================
三、结构体
1、数组(Array)是一组具有相同类型的数据的集合。在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。
结构体是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
struct 结构体名{
结构体所包含的变量或数组
};
定义结构体:
struct stu{
int id;//id
char *name; //姓名
int num; //学号
int age; //年龄
float score; //成绩
};
声明结构体变量:
struct stu stu1, stu2;
给结构体变量赋值:
stu1.id=1;
stu1.name="ly";
其他结构体定义,变量声明和赋值方法:
struct stu{
int id;//id
char *name; //姓名
int num; //学号
int age; //年龄
float score; //成绩
} stu1,stu2[3]{{1,‘lu‘,1069,18,90},{……},{……}};
stu1={2,‘lu‘,1069,18,90}
======================================================================================================
四、共用体
在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:
union 共用体名{
成员列表
};
共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存
union data{
int i;
char ch;
float f;
} ;
union a,b,c;
一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
union data{
int i;
char ch;
float f;
} a,b,c;
union {
int i;
char ch;
float f;
} a,b,c;//这种方法不能再新建其他该共用体类型的变量
a.i=1;
a.ch=‘a‘;
a.f=1.2;
上面三条语句之后,只有a.f还有效,前两个都被覆盖了。
GTK+2.0学习——C数据类型