您的位置:首页 > 其它

C指针原理(74)-GLIB

2014-01-26 14:59 155 查看
三、Glib的数据类型及标准宏

1、GLib数据类型


麦好的AI乐园博客所有内容是原创,如果转载请注明来源


http://blog.csdn.net/myhaspl/

    类型                描述

gboolean

由于c语言没有提供布尔数据类型,所以Glib提供了gboolean,可以设置为TRUE或FALSE。

gchar (guchar)

和标准C的char(unsigned char)类型一致。

gconstpointer

一个指向常量的无类型指针。这种指针指向的数据不能改变。因此,它通常用于函数原型,表明这个函数不会改变该指针指向的数据。

gdouble

与标准C的double类型一致。取值范围从-G_MAXDOUBLE到G_MAXDOUBEL。G_MINDOUBLE指的是gdouble可以储存的最小正数。

gfloat

与标准C的float类型一致。可能的的取值范围从-G_MAXFLOAT到G_MAXFLOAT。G_MINFLOAT指的是gfloat可以储存的最小正数。

gint (guint)

和标准C的int(unsigned int)类型一致。有符号的gint类型的值必须在G_MININT到G_MAXINT的范围内。guint的最大值为G_MAXUINT.

gint8 (guint8)

被设计为在所有平台上都为8位的有符号和无符号整型。gint8的取值范围为-128到127(G_MININT8到G_MAXINT8),guint8的取值范围为0到255(G_MAXUINT8)。

gint16 (guint16)

被设计为在所有平台上都为16位的有符号和无符号整型。gint16取值范围为-32768到32767(G_MININT16到G_MAXINT16),guint16的取值范围为0到65535(G_MAXUINT16)。

gint32 (guint32)

被 设计为在所有平台上都为32位的有符号和无符号整型。gint32取值范围为-2,147,483,648到 2,147,483,647(G_MININT32到G_MAXINT32),guint32的取值范围为0到 4,294,967,295(G_MAXUINT32)。

gint64 (guint64)

被设计为在所有平台上都为64位的有符号和无符号整型。gint64取值范围为-2^63次方到2^63-1(G_MININT64到G_MAXINT64),guint64的取值范围为0到2^64-1(G_MAXUINT64)。

glong (gulong)

和标准C的long(unsigned long)类型一致。glong的取值范围从G_MINLONG到G_MAXLONG。gulong的最大值为G_MAXULONG.

gpointer

 一个定义为void*的无类型指针。只是为了看上去比标准的void*好看。

gshort(gushort)

和标准C的short(unsigned short)类型一致。glong的取值范围从G_MINSHORT到G_MAXSHORT。gushort的最大值为G_MAXUSHORT。

gsize(gssize)

 无符号和有符号的32位整型。在许多数据结构中用来代表大小。gsize被定义为unsigned int,gssize被定义为signed int。

2、标准Glib宏

    宏                                           描述

ABS(a)

返回a的绝对值。这个宏只是简单的返回去掉符号的负数,对正数不进行任何操作。

CLAMP(a,low,high)

确认a是否在low和high之间。如果a不再low和high之间,将会返回与low和high之间与a比较接近的那个。否则返回a。

G_DIR_SEPARATOR G_DIR_SEPARATOR_S

在UNIX系统中,目录用斜杠(/)来分隔,在Windows系统中,用的是反斜杠(\),G_DIR_SEPARATOR以字符类型返回一个适当的分隔符,而G_DIR_SEPARATOR_S返回的是一个字符串。

GINT_TO_POINTER(i) GPOINTER_TO_INT(p)

将一个gpointer转换成一个整数,或将一个整数转换成一个gpointer。整数中只有32位将会被储存。你一定要避免对占用空间超过32位的整数使用这些宏。记住你不能在整数中储存指针,这些宏仅仅是允许你以指针的形式储存整数。

GSIZE_TO_POINTER(s) GPOINTER_TO_SIZE(p)

把gsize转换成gpointer或者把gpointer转换成gsize。如果想把gsize的值从指针转换回来,它事先必须已经通过GSIZE_TO_POINTER()被储存为指针,请参见GINT_TO_POINTER()。

GUINT_TO_POINTER(u) GPOINTER_TO_UINT(p)

把一个无符号整数转换成gpointer,或者把gpointer转换成无符号整数。如果想把整数从指针转换回来,它事先必须已经通过GUINT_TO_POINTER()被储存为指针,请参见GINT_TOOPOINTER()。

G_OS_WIN32 G_OS_BEOS G_OS_UNIX

这三个宏允许你定义只能运行在特定平台的代码。只有和用户使用的操作系统一致的那个宏会被定义,所以你可以用#ifdef G_OS_*来写只能用于用户的平台的代码。

G_STRUCT_MEMBER_P(struct_p, offset)

返回一个指向在结构体内偏移量为offset的成员的无类型指针,偏移量必须在struct_p的范围之内。

G_STRUCT_OFFSET(type, member)

返回一个成员在结构体内的偏移量。type指明结构体的类型。

MIN(a, b) MAX(a, b)

计算两个a和b中的最小值和最大值。

TRUE 和 FALSE

FALSE被定义为0,TRUE为FALSE的逻辑非。这两个值被gboolean所使用。

四、改造21点游戏 

1、引入字符串类型

GString结构包含了三个成员:保存字符串当前状态的C字符串,除了结束符的字符串长度,和为字符串当前分配的内存数量。如果字符串增加到超出分配的内存长度,GString会自动为其分配更多内存。

 

        typedef struct

        {

            gchar *str;

            gsize len;

            gsize allocated_len;

        } GString;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: