结构体变量引用难点解析

技术与开发

语言类型:C语言 上手难度:★★★ 考试类型:计算机二级

结构体知识点在每年的考试中都会以选择题或者填空题的方式出现一两道题,虽然分数不多,但也不能说是送分题,对结构体知识点掌握力度不够也会失分,下面我们来学习讲解结构体变量的定义和使用。

题目:以下程序运行后的输出结果是()。[2005年4月C语言填空题第17题]

struct NODE

{ int k;

struct NODE *link;

};

main()

{ struct NODE m[5],*p=m,*q=m+4;

int i=0;

while(p!=q){

p->k=++i; p++;

q->k=i++; q--;

}

q->k=i;

for(i=0;i<5;i++) printf("%d",m[i].k);

printf("\n");

}

答案:13431

解析:程序执行过程如下:p=m,q=m+4,条件p!=q成立,执行p->k=++i;由于是“前加”,i加1后赋值给m[0].k,m[0].k=1.p++后p=m+l;执行q->k=i++;由于是“后加”,所以m[4].k=1,然后使得i加上1,即i=2,q--后,q=m+3:

p=m+l,q=m+3,条件p!=q成立,执行p->k=++i;,由于是“前加”,所以i=3,m[1].k=3,执行p++后p=m+2;执行q->k=i++;,由于是“后加”,所以m[3].k=3,i=4,q--后,q=m+2;

p=m+2,q=m+2,条件p!=q不成立,则执行q->k=i;即m[2].k=4,故输出的值为13431。

一、定义一个结构体类型

“结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者是一个构造类型。定义一个结构体类型的一般形式为:

struct 结构名

{成员表列};

成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:

类型说明符 成员名;

二、定义一个结构体类型的变量

说明结构变量有以下三种方法。以上面定义的stu为例来加以说明。

1. 先定义结构,再说明结构变量。如上面已经定义了一个结构体类型struct stu,可以用它来定义变量:

struct stu boy1,boy2; //说明了两个变量boy1和boy2为stu结构类型。

小提示:将一个变量定义为结构体类型时,不但要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(比如struct stu),不能只指定为struct型而不指定结构体名。

也可以用宏定义使一个符号常量来表示一个结构类型,例如:

STU boy1,boy2; //这种定义方式类似用int定义变量的形式,不必再写关键字struct。

2. 在定义结构类型的同时说明结构变量。

struct 结构名

{成员表列

};变量名表列

3. 直接定义结构类型变量,与上面定义不同的是不出现结构体名。

struct

{成员表列

};变量名表列

小提示:结构体类型定义和结构体变量定义是完全不同的,对结构体变量来说,在定义时一般先定义一个结构体类型,然后再定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算,在编译时对类型不分配空间,只对变量分配空间。另外,成员名可以与程序中的变量名相同,二者不代表同一对象,例如程序中可以定义一个变量num,这个num与struct stu中的num互不影响。

重点解析

1.不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体中的各个成员分别输出。下面的写法是错误的:

printf("%d,%d\n", stu1);

2.结构体变量名.成员名 中间的“.”是成员(分量)运算符,在所有的运算符中优先级最高,可以把stu1.num当作一个整体来看。成员变量可以像普通变量一样进行各种运算,比如stu2.num=stu1.num+5;的意思是把变量stu1中成员num的值加5后赋值给变量stu2中的成员num。

3.可以引用成员的地址,也可以引用结构体变量的地址

scanf("%d",&stu1.num);

printf("%o",&stu1);

但是下面的写法将导致程序异常:

scanf("%d,%d",&stu1);

读者反馈

读者 小萌:请问哪里可以下载一些计算机等级考试模拟软件?

小编:计算机等级考试模拟软件可以到全国计算机等级考试官方网站下载,其网址为http://www.ncre.cn/ncre_new/download/index.html。全国计算机等级考试官方网站不但提供模拟软件供考生下载,还提供了大量的考试信息,比如考试动态、备考资料等等,另外论坛上有很多有价值的信息,考前请务必留意。