如果有人可以详细解释,这两个声明之间有什么区别:
typedef struct atom {
int element;
struct atom *next;
};
和
typedef struct {
int element;
struct atom *next;
} atom;
答案 0 :(得分:14)
这是正常structure declaration
struct atom {
int element;
struct atom *next;
}; //just declaration
创建object
struct atom object;
struct atom {
int element;
struct atom *next;
}object; //creation of object along with structure declaration
和
这是struct atom
类型
typedef struct atom {
int element;
struct atom *next;
}atom_t; //creating new type
此处atom_t
是struct atom
创建对象
atom_t object;
struct atom object; //both the ways are allowed and same
答案 1 :(得分:12)
typedef
的目的是为类型规范指定名称。语法是:
typedef <specification> <name>;
完成后,您可以像使用任何内置类型的语言一样使用<name>
来声明变量。
在您的第一个示例中,<specification>
是以struct atom
开头的所有内容,但后面没有<name>
。所以你还没有为类型规范命名。
在struct
声明中使用名称与定义新类型不同。如果您想使用该名称,则必须在其前面加上struct
关键字。所以如果你宣布:
struct atom {
...
};
您可以使用以下命令声明新变量:
struct atom my_atom;
但你不能简单地声明
atom my_atom;
对于后者,您必须使用typedef
。
请注意,这是C和C ++之间的显着差异之一。在C ++中,声明struct
或class
类型确实允许您在变量声明中使用它,您不需要typedef
。对于其他复杂类型的构造,例如函数指针,typedef
在C ++中仍然很有用。
您应该查看相关侧边栏中的一些问题,它们会解释此主题的其他一些细微差别。
答案 2 :(得分:0)
typedef关键字的一般语法是:
public static void main(String[] args) {
int sum = 0;
int num = 0;
while (num <= 1000) {
if (num % 13 == 0 || num % 15 == 0 || num % 17 == 0) {
if (num % 30 != 0) {
System.out.println("here" + num);
sum = sum + num;
}
}
++num;
}
System.out.println("Sum = " + sum);
}
typedef existing_data_type new_data_type;