#ifndef objptr
typedef struct { int kind; } gui_obj;
typedef gui_obj * objptr;
#endif
typedef objptr font; /* font of certain size and style */
font a;
// if the macro (constant) 'objptr' is not defined
#ifndef objptr
// define a new type named 'gui_obj',
// which is a struct that contains one
// member named 'kind' of type 'int'
typedef struct { int kind; } gui_obj;
// define a new type named 'objptr',
// which type is a pointer to a type named 'gui_obj',
// which means that variables of type 'objptr' will be able
// to store the addresses to types of 'struct gui_obj'
typedef gui_obj * objptr;
#endif
// define a new type named 'font',
// which is a type of 'objptr'
typedef objptr font;
// declare a variable named 'a' of type 'font'
font a;
a->kind = 42;
// or
(*a).kind = 42;
// in english:
// dereference the object 'a',
// which is of type 'font',
// which is an alias of 'objptr'
// which is an alias of pointer to 'gui_obj',
// which is a struct,
// that contains a member named 'kind' of type 'int',
// that can be accessed and set to e.g. '42'
3条答案
按热度按时间jdzmm42g1#
把代码翻译成英语,你就会明白代码的作用(意思)。
因此,简单地说,
font
是objptr
的类型别名,objptr
是gui_obj*
的类型别名,gui_obj
是struct gui_obj
的类型别名。所以font
是struct gui_obj*
的别名。a
的用法,例如**OT:**上面例子的问题是,如果
objptr
已经定义,并且与struct gui_obj
完全不同,例如:没有成员kind
或者是某种标量类型。eufgjt7s2#
首先,'a'是一个结构体指针,它可以指向一个结构体gui_obj。结构gui_obj有一个整数成员:如果'a'确实指向一个结构gui_obj,你可以通过下面的句子得到它的成员
a->kind
。其次,
typedef gui_obj * objptr;
意味着定义了一个新类型,其名称为objptr,它相当于gui_obj *
,struct pointer。w3nuxt5m3#
这段代码中的“字体”是什么意思?
typedef objptr font;
定义了一个名为font
的新类型名称。它与objptr
的类型相同。“a”是一个整数还是一个指向整数的指针?
两者都不是。
a
是指向gui_obj
的指针。gui_obj
是一个结构。这句话是什么意思?
typedef gui_obj * objptr;
定义了一个新的类型objptr
。它是指向gui_obj
的指针。