从C开始_结构体_结构数组1

最近我们在学习结构体,的确感觉不是很好学,所以决定先跳到结构体这一章来。。其实我也不是蛮透彻,还要在论坛里翻翻查查有啥我自己感觉很费解的问题还要现去问大神( ˉ(∞)ˉ )所以慢慢更新的啦。真心希望你们有空抽点时间看看,毕竟结构体是比较难的


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


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


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


让我们看看上一个程序,在他的结构内只有一本书,显然是远远不够的,老板娘需要的是一个能有许多书的书店,那我们就要把book程序扩展称为可以处理更多的书,显然,每一本书都可以用book结构进行描述,而当要描述俩本书的时候,老板娘就会输入俩本书的信息,我们就需要俩个变量,以此类推,需要处理多少的书我们就可以使用一个这个结构的数组,我会再举一个例子,这个与上一个例子相对应,可以与之相对应着看

#include <stdio.h> 
#define MAXTITL 40 
#define MAXAUTL 40 
#define MAXBKS 100                              /* 最多可以容纳的书籍数目 */ 
struct book {                                   /* 建立book的结构模板 */ 
  char title[MAXTITL]; 
  char author[MAXAUTL]; 
  float value; 
 };  
int main (void) 
{ 
    struct book library[MAXBKS];                /* book 结构数组 */ 
    int count = 0; 
    int index;  
  printf ("Plesae enter the book title \n"); 
  printf ("Press [enter] at thne start of a line to stop \n");
     while (count < MAXBKS &&  gets(library[count].title) != NULL  && library[count].title[0] != '\0') 
  { 
     printf ("Now enter the author \n"); 
     gets (library[count].author); 
     printf ("Now enter the value \n"); 
     scanf ("%f", &library[count++].value);    /* 这里用count++来转换成下一组信息 */  
     while (getchar() != '\n') 
         continue;                             /* 清空输入行 */ 
     if (count < MAXBKS) 
     printf ("Enter then next title \n"); 
  } 
  if (count > 0)                               /* 检测输入的信息数量为真 则显示 */ 
  { 
      printf ("Here is the list of your books : \n"); 
      for (index = 0; index < count; index++)  /* 循环地显示信息 */ 
         printf ("%s by %s : $%.2f \n", library[index].title, library[index].author, 
                                        library[index].value); 
   } 
   else                                        /* 为假则显示错误信息 */ 
      printf ("No Books? Too bad\n"); 
   return 0; 
} 

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

那我可以运行一下

(感觉穿不了照片欸  (~ ̄▽ ̄)→))* ̄▽ ̄*)o)手打

    Plesae enter the book title 
    Press [enter] at thne start of a line to stop 
    My life as a Budgie 
    Now enter the author 
    Mack Zackles 
    Now enter the value 
    12.95 
     Enter then next title  
      .... more ........  
Here is the list of your books : 
My life as a Budgie by Mack Zackles : $12.95 
Thought and unthought Rethought by kindra Schlagmeyer : $43.50 
The Business of a Bee by Buster Downsize : $19.25 
.......more


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

首先,我们看看如何声明结构数组以及我们是如何访问各个成员的。

——————————

声明结构数组-是和其他简单的类型数组是一样的

sturct book library[MAXBKS];

这条语句就声明了library为一个菊耦MAXBKS个元素的数组,而在这个数组中每一个元素都是book类型的结构,因此,library[0]就是一个book结构,library[1]也是一个book结构。以此类推。其实我想画一个图的,谁能教我怎么上图( ̄Q ̄)╯,[记住,library 它不是结构名,他只是元素类型为struct book结构的数组名。]


在这之后我们再来看看我们是如何标记我们的成员以方便我们把它们单独提取出来。

标记结构数字的成员可以采用老方法,在结构名后(虽然我刚才说了library不是结构名但是library[0]就恰好是结构名了)面加上一个点运算符,然后接着成员名,就像这样:

library[0].value  /*第1个数组元素的value成员*/

library[4].title     /*第5个数组元素的title成员*/

注意,数组下标是更在library后面,而不是跟在成员名的后面;

library.value[2]      //是错误的

library[2].value      //正确

使用library[2].value 的原因是library[2]是结构变量名,就像library[1]是另外一个结构变量名一样。

那我再问一个问题,下面这个表达式你怎么解读:

library[2].title[2]


这是由第 3 个结构 (library[2]部分) 描述的书本的名称的第 5 个字符 (title[4]部分). 在本例中即为字符 B. 这个例子指出, 点运算符右边下标作用亍各个成员, 而点运算符 左边的下标作用亍结构数组.

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

那我总结一下,我们看看下面的序列

library                   /*book结构数组*/

library[2]               /*数组元素,因此是一个book结构*/

library[2].title        /*char数组,是library[2]里的title成员*/

library[2].title[4]    /*是成员title里面的一个字符*/

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值