所以A是其他地方定义的结构。您可以忽略此处定义变量的顺序。 在这里,当我使用'B'来定义一个新变量时,到底发生了什么?它是否创建了一个变量,它是指向A类结构的指针?我想详细解释当'typedef struct A * B;'时会发生什么。遇到了。感谢。
typedef struct A *B;
typedef struct {
B pd_ctx;
} C;
static inline B convert (B handle)
{
C *ctx;
ctx = (C *)handle;
return (ctx->pd_ctx);
}
答案 0 :(得分:0)
typedef struct A *B;
当我使用'B'来定义一个新变量时,到底发生了什么?它是否创建了一个变量,它是指向A类型结构的指针?
是。如果你这样看它可能会更清楚:
typedef struct A* B;
星号的位置与样式有关,与参数和声明一样。
在这种情况下,B不是指针,它是指针类型。
答案 1 :(得分:0)
typedef
只会创建一个类型别名。换句话说,它不会创建新类型,只会创建其他类型的缩写或重写。例如,如果您编译following code:
typedef int T1;
void fun1(int) {}
void fun1(T1) {}
由于重新定义了函数fun1
,您将收到编译器错误。
关于typedef
的语法,它有两部分:
typedef type_declaration identifier;
在你的情况下:
typedef |struct A *|B|;
星号不是标识符的有效字符。标识符仅为B
,星号属于类型声明部分。
总而言之,B
是写struct A*
类型的别名或替代方式,当然,pd_ctx
的类型为struct A*
。