首页 > 代码库 > 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数据类型