结构体,关键字

来源:互联网 发布:索尼手机设置4g网络 编辑:程序博客网 时间:2024/06/06 04:36

一.关键字

static:  修饰全局静态变量:作用范围局限于它的源文件,即只有本文件内的代码才可以访问它,变量名在其他文件内不可见。
             修饰局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内的静态变量的值也能够维持。
             修饰静态函数:作用范围仅限于它的源文件,即只有本文件内才能够调用,函数名在其他文件不可见。
             存放位置:程序开始时,存放在全局数据区,结束时释放空间,默认初始化值是0,使用时可改变其值。

extern:  可以置于变量或函数前,以表明变量或函数的定义在别的文件中,下面代码用到的这些变量或函数是外来的,不是本文件定义的,提示链接器遇到此变量和函数                                   时在其他模块中解析/绑定此标识符。

enum:  枚举类型的定义形式为:
                            enum typeName{ valueName1, valueName2, valueName3, ...... };
              enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字;valueName1, valueName2, valueName3, ......是每个               值对应的名字的列表。注意最后的;不能少。

    

              需要注意的两点是:
             ( 1 ) 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的,不能再定义与它们名字相同的变量。
             ( 2 ) Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。
             枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。


二.结构体

1.在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

                       struct 结构体名{
                                                         结构体所包含的变量或数组
                                                   };

2.结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:
 struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};
 
stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。注意大括号后面的分号;不能少,这是一条完整的语句。

3.结构体变量

    既然结构体是一种数据类型,那么就可以用它来定义变量。例如:
    struct stu stu1, stu2;
    定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

4.结构体成员的获取和赋值

   结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号 . 获取单个成员。获取结构体成员的一般格式为:
                    结构体变量名.成员名;

   如:给上述结构体成员赋值
          stu1.name = "Tom";
          stu1.num = 12;
          stu1.age = 18;
          stu1.group = 'A';
          stu1.score = 136.5;

5. 结构体数组

     所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体。

     定义结构体数组和定义结构体变量的方式类似,请看下面的例子:
    struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组 
    float score;  //成绩
     }class[5];
    表示一个班级有5个学生。

    结构体数组在定义的同时也可以初始化。

6.结构体和指针

     指针也可以指向一个结构体,定义的形式一般为:
     struct 结构体名 *变量名;
     下面是一个定义结构体指针的实例:
    struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
     } stu1 = { "Tom", 12, 18, 'A', 136.5 };
     //结构体指针
     struct stu *pstu = &stu1;

      注意:结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量                     的地址,必须在前面加&,所以给 pstu 赋值只能写作:
                  struct stu *pstu = &stu1;
                  而不能写作:
                  struct stu *pstu = stu1;

7.通过指针获取结构体成员

    通过结构体指针可以获取结构体成员,一般形式为:
    (*pointer).memberName
    或者:
    pointer->memberName
    第一种写法中,. 的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.numberName),这样意义就完全不了。
    第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

 

      

阅读全文
0 0
原创粉丝点击