从C开始_结构体_初始化和对成员的访问

 struct book gift = { .value = 25.99,
                                 .author = "James Broadfool",
20.99"


———————————————————————————————————————————————————
设计程序最重要的一个步骤就是一个表示数据的正确方法。在大多数情况下,使用单一简单的变量和数组都是不够的。因此C使用了一种结构变量进一步增强了表示数据的能力,可以灵活地应对多种数据,在这个结构体中你还能创建新的形式以及形成新的数据类型。那我们先从一个例子里面看看为什么需要使用结构以及怎么创建结构和使用结构


———————————————————————————————————————————————————

/* book.c -- 只包含一本书的图书目录 */ 
#include <stdio.h> 
#define MAXTITL 41                      /* 书名的最大长度 +1 */ 
#define MAXAUTL 31                    /* 作者名的最大长度 +1 */ 
struct book {                                   /* 结构模板: 标记为 book */ 
    char title[MAXTITL]; 
    char author[MAXAUTL]; 
    float value; 
    };                                                 /* 结构模板结束 */ 
int main (void) 

    struct book library;                     /* 吧 library 声明为 book 类型的变量 */ 
                                                      /* 这里的声明结构是必须的 */  
    printf ("Please enter the book title \n");  /* 请输入书名 */ 
    gets(library.title);                       /* 存偹在 title 部分 */ 
    printf ("Now enter the author \n"); /* 请输入作者 */ 
    gets (library.author);                     /* 存偹在 author 部分 */ 
    printf ("Now enter the value \n");  /* 请输入价格 */ 
    scanf ("%f", &library.value); 
    printf ("%s by %s: $%.2f \n", library.title, library.author, library.value); 
    printf ("%s :\"%s\" ($%.2f) \n", library.author, library.title, library.value); 
    printf ("Done \n"); 
 
    return 0; 

————————————————————————————————————————————————
而这是在程序的运行例子
Please enter the book title 
Chicken of the Alps 
Now enter the author 
Bismo Lapoult 
Noe enter the value 
14.95 
Chicken of the Alps by Bismo Lapoult : $14.95 
Bismo Lapoult: "Chicken of the Alps" ($14.95) 
Done 


————————————————————————————————————————————————

对于结构体的初始化
对于初始化我们都已经不陌生了,我们已经知道了如何初始化变量和数组
int apple = 0;
int apple[7] = {0,1,1,1,2,4,5,7,8};
相对的我们的就够变量也能被初始化么?是的,可以,要初始化我们的结构体可以用于初始化数组相似的方法
struct book library =
{
“the prate and the Debious Damsel",
"Renee Vivotte",
1.95
};
换句话说就是用花括号括起来,用逗号分隔的一个个初始化项目,而每个都要与结构成员类型相匹配。。我们可以把title成员初始化为字符串,将value成员初始化为数字,但我建议你们可以把每个初始化单独写一行,但你必须用逗号分隔。

既然初始化完了结构变量,那我们看看我们是如何访问我们的结构成员的。
其实我们的结构就像是一个”超级数组“,在这个超级数组里面,一个元素可以说char类型,但下一个可能就是float类型的,在下一个可以是int数组,使用下标可以访问一个数组的各个元素,那我们又是如何访问结构里的各个成员呢?
我们就要用到一个成员运算符——点(.)。
比如library.value就是说的是library的value部分,而我们可以想使用任何其他的float变量一样使用library.value。同样也可以像使用一个char数组一样使用library.title
因此在例子中会有这样的代码
gets(library.title);
scanf("%f", &libraray.value);
其实在本质上,.title,   .author,   .value在book结构里扮演了类似数组里的脚标的角色。

其实我一直很纠结是先讲访问结构成员呢还是跟着初始化讲结构的指定初始化项目
那我们现在就说说初始化讲结构的指定初始化项目(这个名字有点复杂,可以这么理解啊,就是制定结构里的各个元素的初始值)
 C99 支持结构的指定初始化项目, 其方法与数组的顷目相似. 只是, 结构的指定初始化项目使用点运算符和成员名 来表示具体的元素元素. 例如, 我们就只初始化book结构的成员value,可以:
struct book surprise = { .value = 10.99};
在其中我们也可按照任意的顺序使用指定初始化项目:
struct book gift = { .value = 25.99,
                                 .author = "James Broadfool",
.title = "Rue for the Toad"
——————————————————————————————————————————————————
我在举一个例子,为了让你们有跟好的观赏效果,我把它放在了文章的最前面,你可以好好想想他实际得到的值是什么。[往上看~]
———————————————————————————————————————————————————
 正如数组一样, 跟在一个指定初始化项目之后的常初始化项目为跟在指定成员后的成员提供了初始值. 此外, 对特定成员的最后一次赋值才是该成员真正的值 我们将20.99赋给成员 value , 因为他在结构设计中顺序是在author之后,author赋值完成后自动跳到value,由于对特定成员的最后一次赋值才是该成员真正的值,因此我们用20.99吧原先的25.99覆盖了而实际赋的就是20.99啦


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值