从C开始_结构体_

来源:互联网 发布:易订货系统 源码 编辑:程序博客网 时间:2024/04/28 14:38


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

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

         设计程序最重要的一个步骤就是选择一个表示数据的正确方法。在大多数情况下,使用单一简单的变量和数组都是不够的。因此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

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

首先我想要讲的是结构声明;

结构声明就是描述结构如何组合在一起的主要方法,声明方式就像这样:

struct book {                                   
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
    };                 

        从这个描述我们不难看出这是声明了一个book结构设计,而这是以个有俩个字符数组和一个float变量组成的一个结构,但目前并没有创建一个新的世纪的数据对象,二世描述了组成这类对象的元素(有时候还可以吧这个结构叫做模板,因为他够累出数据改如何储存)

       让我们看看细节,首先我先使用的是关键字struct,他表示接下来的是一个结构,后面是一个可选的标记(book),他是用来引用该结构的快速标记。而这个标记是可以任意取名的。然后我么就可以这样声明

  struct book library

它把library声明为一个使用gbook结构设计的结构变量。


 在结构声明中, 接下来是用一对花括号括起来的结构成员列表. 每个成员发量都用它自己的声明来描述  , 用一个分号来结束述. 例如, title 是一个拥有 MAXTITL 个元素的 char 数组. 每个成员可以是任何一种 C 的数据, 甚至可以就是结构 

  我们可以把这个声明放在任何函数的外面(就像我举得这个例子);也可以放在一个函数定义的内部,如果这个结构声明至于一个函数内部,他的标记就只能在该函数内部使用。但如果说是外部声明,它可以被放在本文件中声明之后的所有函数使用,比如我又加一个函数,可以这样定义:

    struct book dickens;

这样,这个函数中将含有一个book结构的变量 dickens.


结构声明了之后就该是定义结构变量了:

我觉得我们学习的“结构”这个词有俩个意思,一个意思是“结构设计”,这就是我们刚刚讨论过的,结构设计高数编译器如何表示数据u,但是他没有让计算机为我们的数据分配空间,下一步是创建一个”结构变量“,这个就是结构的第二个意思,

在例子中创造结构变量的那一行驶

  struct book library;

看到这个一条指令时,编译器会创建一个变量library,而编译器会使用book为模板为该变量分配空间

:一个额有MAXTITL个元素的char数组,

     一个有MAXUTL个元素的char数组,

     和一个float变量,这些储存空间是一个名字library被结合在一起的


[在结构变量的声明中,struct book所起的作用就像int或者float等比较简单的声明中说起的作用一样,比如可以定义多个struct book变量,甚至可以定义数组或是指向该结构的指针:

   struct book apple, banana, *p;

结构变量apple和banana均包含title,author和value部分,指针p可以指向apple,banana,或者其他任何book结构变量,实际上book结构声明创建了额一个额名为struct book的新类型]



当然我再举俩个例子,他们都是第一个声明的简化

struct book {
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
  } library; //在定义之后跟上变量名



  struct  { /* 无标记 */
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
  } library; 


换句话书哦,声明结构的过程和定义结构变量的过程可以被合并成为一步。而第一个是有标记的,而第二个是不使用标记的一种情况,然而,如果你想多次使用一个结构模板,就与要使用带有标记的形式;或者你也可以使用到typedef





0 0