对结构名称的Typedef为指针

时间:2014-06-01 10:13:56

标签: c pointers structure typedef

所以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);
}

2 个答案:

答案 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*