二级C语言考试辅导教程第七章:结构与联合[3]

二级C语言考试辅导教程第七章:结构与联合[3],第1张

二级C语言考试辅导教程第七章:结构与联合[3],第2张

结构指针变量
结构指针变量的描述和使用当一个指针变量被用来指向一个结构变量时,它被称为结构指针变量。
结构指针变量中的值是所指向的结构变量的第一个地址。结构变量可以通过结构指针访问,这与数组指针和函数指针的情况相同。结构指针变量描述的一般形式是:
struct结构名*结构指针变量名
。例如,在前面的示例7.1中定义了结构stu。要描述一个指向stu的指针变量pstu,可以写成:
struct stu * pstu;

当然,在定义stu结构时也可以解释Pstu。像前面讨论的各种指针变量一样,结构指针变量在使用之前必须赋值。赋值是将结构变量的第一个地址赋给指针变量,而不是结构名。如果boy是stu类型的结构变量,那么:pstu=&boy是正确的,而:pstu=&stu是错误的。

名字和结构变量是两个不同的概念,不能混淆。一个结构名只能代表一种结构形式,编译系统不会给它分配内存空。只有当一个变量被描述为这种类型的结构时,存储空空间才被分配给该变量。所以上面的&stu是错的,不可能得到一个结构名的首地址。有了结构指针变量,访问结构变量的每个成员就更容易了。

一般的访问形式是:(*结构指针变量)。成员名可以是:
结构指针变量->成员名
例如:(*pstu)。num or: pstu->num
。应该注意的是(*pstu)两边的括号是必不可少的,因为成员符号“..如果去掉括号,写成*pstu.num,就相当于*(pstu.num)。这样,意思就完全错了。下面的例子用来说明结构指针变量的具体解释和用法。来源:www.examda.com
程序中定义并初始化了stu结构类型的外部数组boy。在主函数中将ps定义为指向stu类型的指针。在for的循环语句的表达式1中,ps被赋予boy的第一个地址,然后循环5次以输出boy数组中每个成员的值。应该注意,虽然结构指针变量可以用来访问结构变量或结构数组元素的成员,但它不能指向成员。也就是说,不允许拿会员的地址去给。因此,下面的赋值是错误的。ps=&boy[1]。性;只能是:ps = boy(给出数组的第一个地址)
或者:
PS = & boy[0];(将第一个地址赋予元素0)

结构指针变量作为函数参数

在ANSI C标准中,允许将结构变量用作整体传输的函数参数。但这种转移需要逐个转移所有成员,尤其是成员为数组时,会使转移时间和空开销很大,严重降低程序的效率。所以方法就是用指针,也就是用指针变量作为函数参数来传输。此时从实参传递给形参的只是地址,这样就减少了时间和空的开销。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C语言考试辅导教程第七章:结构与联合[3]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情