C语言 这段代码中的“字体”是什么意思?

jtjikinw  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(111)
#ifndef objptr
  typedef struct { int kind; } gui_obj;
  typedef gui_obj * objptr;
#endif

typedef objptr font;          /* font of certain size and style */
font a;

“a”是一个整数还是一个指向整数的指针?

typedef gui_obj * objptr;

这句话是什么意思?

jdzmm42g

jdzmm42g1#

把代码翻译成英语,你就会明白代码的作用(意思)。

// 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;

因此,简单地说,fontobjptr的类型别名,objptrgui_obj*的类型别名,gui_objstruct gui_obj的类型别名。所以fontstruct gui_obj*的别名。
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'

**OT:**上面例子的问题是,如果objptr已经定义,并且与struct gui_obj完全不同,例如:没有成员kind或者是某种标量类型。

eufgjt7s

eufgjt7s2#

首先,'a'是一个结构体指针,它可以指向一个结构体gui_obj。结构gui_obj有一个整数成员:如果'a'确实指向一个结构gui_obj,你可以通过下面的句子得到它的成员
a->kind
其次,typedef gui_obj * objptr;意味着定义了一个新类型,其名称为objptr,它相当于gui_obj *,struct pointer。

w3nuxt5m

w3nuxt5m3#

这段代码中的“字体”是什么意思?
typedef objptr font;定义了一个名为font的新类型名称。它与objptr的类型相同。
“a”是一个整数还是一个指向整数的指针?
两者都不是。a是指向gui_obj的指针。gui_obj是一个结构。
这句话是什么意思?
typedef gui_obj * objptr;定义了一个新的类型objptr。它是指向gui_obj的指针。

相关问题