首页 理论教育C语言程序设计基础:结构体变量与指针的关联

C语言程序设计基础:结构体变量与指针的关联

【摘要】:指向结构体变量的指针变量叫结构体类型指针变量,其定义方式、使用方法与指向基本变量的方法相同。使用结构体指针变量时还需要特别注意,结构体变量的地址与结构体变量成员的地址是不同的。已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体指针变量做函数的形式参数。

指向结构体变量指针变量叫结构体类型指针变量,其定义方式、使用方法与指向基本变量的方法相同。其定义形式为:

struct结构体名 *结构体指针变量;

例如:若已定义结构体类型struct Student,则struct Student*ptr;定义了一个struct student类型的指针变量ptr。

要使结构体指针变量指向某个结构体变量,其基本形式为:

结构体指针变量=&结构体变量;

例如,下面的C语句段:

struct Student stu,*ptr;

ptr=&stu;

也可以在定义结构体类型指针变量的同时对其初始化,例如:

struct Student stu,*ptr=&stu;(www.chuimin.cn)

通过指向结构体变量的指针变量访问结构体变量成员使用如下形式:

(*结构体指针变量).结构体成员;

例如:(*ptr).name、(*ptr).sex等。

在使用指向结构体变量的指针来引用结构体变量时,注意括住指针变量引用形式的圆括号是必不可少的,如(*ptr)。因为成员符“.”的优先级高于“*”。如果去掉括号写作*ptr.sex则等价于*(ptr.sex),这样意义就完全不对了。由于用结构体类型指针变量表示结构体变量成员时,表达式形式非常容易错写为:*指针变量.成员名,为了使得表达式更清晰且不容易误写,C语言提供了指向运算符“->”,对通过指针变量访问结构体变量成员给出了一种简洁的表示形式:

结构体指针变量->成员;

例如:(*ptr).sex和ptr->sex表达了同样的结构体成员分量。

使用结构体指针变量时还需要特别注意,结构体变量的地址与结构体变量成员的地址是不同的。例如,有定义:struct Student stu2,*ptr;,则使用指针变量ptr即可指向结构体变量stu2,但结构体变量成员stu2.sex在示例结构体类型中是一个字符类型变量,不能被结构体类型指针指向,而只能使用字符类型指针变量存放它的起始地址。

【例10.9】 已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体指针变量做函数的形式参数。

Average函数中使用结构体指针变量s作为形式参数,函数被调用时该指针变量指向实参结构体变量stu,函数中分别使用了s->math和(*s).C_Language两种表达形式操作了指针变量指向的结构体数据的成员。程序执行的结果是:该学生的平均成绩为81.00。