5.1.2 结构变量的声明和使用

    在程序中,可以像声明普通的int型变量一样声明一个结构变量,如下所示。


    struct student A;

    该语句声明了一个student型的变量A,在声明结构变量时,关键词struct可以省略,而直接写成“student A;”,这样,结构类型student的用法就和int和long等基本类型名相同,这说明结构定义了一种新类型。

    结构类型和结构变量是两个不同的概念,结构类型就像int和double等类型一样,是一种数据类型,编译器并不对其分配内存空间,只有声明了结构类型的变量时,才对该变量分配存储空间。

    变量A是student型,可以使用成员操作符(.)来访问各个成员(内部存储的数据),例如,A.name、A.age和A.weight分别代表变量A中存储的姓名、年龄和体重的信息,实际上,可以将A.name看成一个普通的字符数组,将A.age和A.weight分别看成普通的int型变量和float型变量,总之,通过“结构变量名.成员名”可以访问变量中的成员,见代码5.1。

    代码5.1 声明一个结构变量并对其成员进行访问StructSample


    <———————————-文件名;example501.cpp———————————————-> 01 #include<iostream> 02 struct student//定义结构student 03 { 04 char name[20];//字符数组name,表示姓名 05 int age;//int型变量age,表示年龄 06 float weight;//float型变量weight,表示体重 07 }; 08 int main() 09 { 10 using namespace std; 11 student A;//可以像使用内置类型int一样使用student,创建结构变量A 12 cout<<"请输入学生姓名:"<<endl; 13 cin>>A. name;//通过访问A中的成员name 14 cout<<"请输入学生年龄:"<<endl; 15 cin>>A. age;//通过访问A中的成员age 16 cout<<"请输入学生体重:"<<endl; 17 cin>>A. weight;//通过访问A中的成员weight 18 cout<<"姓名:"A.name<<",年龄:"<<A.age<<",体重:"<<A.weight<<endl; 19 return 0; 20 }

    输出结果如下所示。


    请输入学生姓名: Zhangsan(注:键盘输入) 请输入学生年龄: 24 (注:键盘输入) 请输入学生体重: 60 (注:键盘输入) Zhangsan,年龄:24,体重:60

    【代码解析】代码第2~7行,声明了一个student型的变量A,并由用户通过键盘依次输入学生的姓名、年龄和体重,由A.name、A.age和A.weight对变量A中的成员进行访问,最后对写入结果进行输出。

    注意

    结构定义的位置有一定讲究。对本例来说,既可以将student结构定义在main函数的外部(外部声明),也可以将其定义在main函数内部的最前面(内部声明),总之,只要在使用“student A;”语句声明student型结构变量前完成student结构的定义即可。

    与结构一样,变量(普通变量、数组和指针等)除了在main函数内部声明外,还可在main函数外部声明,对简单程序来说,两种声明方式可能没有区别,但对于一些复杂的程序,可能会涉及声明的作用域,关于这方面的详细内容请参考第6章。

    技巧在使用变量、结构以及后面要介绍的函数前,一定要“先声明,后使用”。

    其实,在定义结构的同时完成创建结构变量的工作,只需要把结构变量名放在结构定义结束花括号的后面即可,下列语句在定义student结构的同时声明了两个student型的结构变量stu1和stu2,如下所示。


    struct student { char name[20]; int age; float weight; }stu1,stu2;