结构体的定义、赋值以及取用其中成员的方法

作者在 2011-09-09 16:04:48 发布以下内容
/*
时间:2011年9月9日15:02:27
目的:以学生成绩管理为例学习结构体使用的基本知识
要求:了解定义结构体的三种方法,掌握推荐使用的第一种
      掌握结构体初始化和赋值的方法
      熟练掌握取出结构体成员的两种方法
      1. 变量名.成员名
      2. 指针变量名->成员名 (这种更常用)
      认真体会为什么两者等价
*/

# include <stdio.h>

//定义结构体的第一种方法,推荐使用
struct student            //定义一个结构体,实际上是定义了一个叫struct student的复合数据类型
{
int age;                //每个学生的信息包括很多内容,年龄、性别、分数等,单独定义变量很麻烦,所以创造一个新的数据类型
double score;
char sex;
};                        //注意这里的分号;

//定义结构体的第二种方法
struct student2
{
int age;
double score;
char sex;
} zhao1;                    //定义的时候直接跟变量名,这种方式只能对zhao1变量使用一次,不好

//定义结构体的第3种方法
struct                        //省去结构体名,也是只能对qian2一个变量使用一次,不好
{
int age;
double score;
char sex;
} qian2;


int main(void)
{
    //结构体赋值的第一种方法
    struct student sun3 = {17, 88.5, 'M'};        //赋值可以在定义变量名的时候进行初始化,struct student是数据类型,相当于int,整个语句类似于int a[3] = {1,2,3};
    printf("年龄:%d,性别:%c,成绩:%lf\n", sun3.age,sun3.sex,sun3.score); //输出年龄:17,性别:M,成绩:88.500000

    
//结构体赋值的第二种方法
    struct student li4;                            //也可以先定义变量,再对变量赋值
    li4.age = 18;                                //不过和数组的感觉一样,这时候不能整体赋值,而是对每一个成员进行赋值,注意格式为 变量名.成员名
    li4.score = 93;                                //输入代码时的小技巧,定义完变量以后编译一下,之后在赋值时敲li4.,会自动输出成员名列表可供选择
    li4.sex = 'F';                                
    printf("年龄:%d,性别:%c,成绩:%lf\n", li4.age ,li4.sex ,li4.score );    //输出年龄:18,性别:F,成绩:93.000000

    
//取出结构体成员的第一种方法
    struct student zhou5 = {17, 88.5, 'M'};        
    zhou5.score = 100;                            //上面的变量名.成员名 其实也是将结构体中每一个成员取出 单独赋值修改的第一种方法
    printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score);    // 年龄:17,性别:M,成绩:100.000000

    
//取出结构体成员的第二种方法
    struct student * pzhou5 = &zhou5;  //取出结构体中成员的另一种方法是使用指针,格式为指针变量名->成员名。这种方法更常用
    pzhou5->age = 16;                  //这里的pzhou5->age,在系统里会被自动转化为(*pzhou5).age,这就是 -> 的含义
                                       
//所以 pzhou5->age 等价于 (*pzhou5).age 也等价于 zhou5.age
                                       
//pzhou5->age 的含义是 pzhou5 所指向的那个结构体变量 中的 age 这个成员

    printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score);  //输出 年龄:16,性别:M,成绩:100.000000
    printf("年龄:%d,性别:%c,成绩:%lf\n", pzhou5->age,pzhou5->sex,pzhou5->score);    //pzhou5->age和zhou5.age等价,在printf中写成哪种结果没有区别

    return 0;
}
郝斌视频笔记 | 阅读 2978 次
文章评论,共0条
游客请输入验证码
最新评论