typedef重定义类型时是否需加*?C结构体指针类型使用疑问
关于C语言typedef和指针类型的问题解答
第一个问题:定义node_t类型变量时是否无需添加指针符号*?
是的,完全不用。因为你的代码里已经通过typedef struct node_s* node_t;把node_t定义成了指向struct node_s的指针类型,它本身就带指针属性。
比如你写的函数:
node_t f(node_t node) { ... }
这里的参数node就是一个struct node_s*类型的指针,返回值也是同样的指针类型,不需要再加*。如果这时候画蛇添足加*,反而会变成指向指针的指针(struct node_s**),和预期不符。
第二个问题:使用已有类型进行typedef重定义时,是否需要添加*?
这取决于你想定义的新类型是什么:
- 如果只是给原类型起一个别名(新类型和原类型完全一致),不需要加
*。比如:typedef int my_int; // my_int就是int的别名 - 如果想把新类型定义成原类型的指针类型,那就必须加
*。比如你代码里的typedef struct node_s* node_t;,就是把node_t定义成struct node_s*的别名;再比如:typedef char* str_t; // str_t就是char*的别名
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

