struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name 是结构类型的名称,object_name 可以是一组该结构类型的对象的有效标识符。在花括号 {} 内,是数据成员的列表,每个成员都用一个类型和一个有效的标识符作为其名称来指定。 |
|
product 的结构类型,并定义它有两个成员:weight 和 price,每个成员都有不同的基本类型。这个声明创建了一个新的类型(product),然后用它来声明该类型的三个对象(变量):apple、banana 和 melon。请注意,一旦 product 被声明,它的使用方式就和任何其他类型一样。struct 定义的末尾,分号(;)之前,可以使用可选字段 object_names 来直接声明该结构类型的对象。例如,结构对象 apple、banana 和 melon 可以在定义数据结构类型时就进行声明: |
|
object_names,类型名称(product)就变成了可选的:struct 语句要么需要一个 type_name,要么在 object_names 中至少有一个名称,但不一定两者都需要。product)和该类型的对象(apple、banana 和 melon)。从一个结构类型(product)可以声明出许多对象(例如 apple、banana 和 melon)。apple、banana 和 melon),就可以直接访问它们的成员。语法很简单,在对象名和成员名之间插入一个点(.)。例如,我们可以像操作它们各自类型的标准变量一样来操作这些元素: |
|
apple.weight、banana.weight 和 melon.weight 的类型是 int,而 apple.price、banana.price 和 melon.price 的类型是 double。 |
|
Enter title: Alien Enter year: 1979 My favorite movie is: 2001 A Space Odyssey (1968) And yours is: Alien (1979) |
yours.year 是一个 int 类型的有效变量,而 mine.title 是一个 string 类型的有效变量。mine 和 yours 本身也是有类型的变量(movies_t 类型)。例如,它们都被传递给了 printmovie 函数,就像它们是简单变量一样。因此,数据结构的一个特性就是能够既可以单独引用其成员,也可以引用整个结构。在这两种情况下,都使用相同的标识符:结构体的名称。 |
|
Enter title: Blade Runner Enter year: 1982 Enter title: The Matrix Enter year: 1999 Enter title: Taxi Driver Enter year: 1976 You have entered these movies: Blade Runner (1982) The Matrix (1999) Taxi Driver (1976) |
|
|
amovie 是一个 movies_t 结构类型的对象,而 pmovie 是一个指向 movies_t 结构类型对象的指针。因此,下面的代码也是有效的: |
|
pmovie 的值将被赋为对象 amovie 的地址。->)。 |
|
Enter title: Invasion of the body snatchers Enter year: 1978 You have entered: Invasion of the body snatchers (1978) |
->)是一个解引用运算符,专门用于指向含有成员的对象的指针。这个运算符用于直接从对象的地址访问其成员。例如,在上面的例子中: |
|
|
|
pmovie->title 和 (*pmovie).title 这两个表达式都是有效的,都访问了由名为 pmovie 的指针所指向的数据结构的成员 title。这与下面的表达式完全不同: |
|
|
|
pmovie 中一个假设存在的名为 title 的指针成员所指向的值(但实际情况并非如此,因为 title 不是指针类型)。下表总结了指针运算符和结构成员运算符的可能组合:| 表达式 | 求值内容 | 等价于 |
|---|---|---|
a.b | 对象 a 的成员 b | |
a->b | 由 a 指向的对象的成员 b | (*a).b |
*a.b | 对象 a 的成员 b 所指向的值 | *(a.b) |
|
|
|
|
动态内存 | 目录 | 其他数据类型 |