C语言typedef问题

typedef struct S{intg;char h;}T;以下叙述中正确的是(B)
(A) 可用S定义结构体变量
(B) 可用T定义结构体变量
(C) S是struct类型的变量
(D) T是struct类型的变量
========书上说Typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效,为何答案A不对呢?参考答案是B,求大侠指教

【第一个问题】

typedef 是用来给类型取别名的(注意:只是定义别名,不是定义变量)。例如:
struct Element {
char name[10];
int age;
};
typedef Element ElementType;
则以下两种定义变量的方法是完全等价的。
struct Element e;
ElementType e;

同样的也可以这样定义别名:
typedef Element *ElementPtr;
则以下三种定义变量的方法是完全等价的。
struct Element *p;
ElementType *p;
ElementPtr p;

另外,也可以像下面这样,在定义类型的同时,连别名也一起定义好了:
typedef struct Element {
char name[10];
int age;
} ElementType, *ElementPtr;

【第二个问题】

要注意,在C/C++中,“T[2]”这样的表达式,不一定是数组,也可能是指针!
如果T是指针,则T[2]等价于 *(T+2)。
你给的例子里,指针T是有定义的(函数的第一个参数)。
温馨提示:答案为网友推荐,仅供参考
相似回答