S1:以下任何一个都可以用来声明一个单向链表的节点。如果我们使用第一个声明,“struct node * nodePtr;”将用于声明指向节点的指针。如果我们使用第二个声明,“NODEPTR nodePtr;”可用于声明指向节点的指针。
/* First declaration */
struct node {
int data;
struct node * nextPtr;
};
/* Second declaration */
typedef struct node{
int data;
NODEPTR nextPtr;
} * NODEPTR;
S2:以下任何一个都可以用来声明一个单向链表的节点和“NODEPTR nodePtr;”可用于使用以下任何一种声明指向节点的指针
/* First declaration */
typedef struct node
{
int data;
struct node *nextPtr;
}* NODEPTR;
/* Second declaration */
struct node
{
int data;
struct node * nextPtr;
};
typedef struct node * NODEPTR;
(A)陈述 S1 为真,陈述 S2 为假
(B)陈述 S2 为真,陈述 S1 为假
(C) S1 和 S2 都为真
(D)陈述 S1 和陈述 S2 都不为真答案:(乙)
说明: S1: typedef用法不正确。基本上,我们不能在应用 typedef本身时使用尚未被 typedef-ed 的数据类型。这里,NODEPTR 尚未定义(即 typedef-ed),我们在结构本身内部使用 NODEPTR。
S2:是的。两者是等价的。上述任一声明均可用于“NODEPTR nodePtr;”。事实上,第一个是第二个的紧凑形式。
这个问题的测验