文章教程

全国计算机等级考试二级C语言11.3指向结构体类型数据的指针

8/22/2020 10:24:52 PM 人评论 次浏览

11.3 指向结构体类型数据的指针

考点3 指向结构体变量的指针

真考链接

考点3难度适中,属于重点理解内容。在选择题中的考核概率为20%。考核方式多以读程序题写运行结果的形式出现。

看下面的例子:

#include <string.h>

#include <stdio.h>

main()

{ struct objects{

char name[20];

int size;

{ char color[10];

float weight;

float height;

};

struct objects obj1;

struct objects *p;

p=&obj1;

strcpy(obj1.name,"pen");

obj1.size=10;

strcpy(obj1.color,"black");

obj1.weight=50.5;

obj1.height=18.5;

printf("name:% s\nsize:% d\ncolor:% s\nweight:% f\nheight:% f\n",obj1.name,obj1.size, obj1.color,obj1.weight,

obj1.height);

printf("name:% s\nsize:% d\ncolor:% s\nweight:% f\nheight:% f\n",(*p).name,(*p).size, (*p).color,(*p).weight,(*p).height);

这里声明了一个structobjects类型,并且定义了一个该类型的变量obj1,又定义了一个指向structobjects类型的数据指针p,并且将p指向obj1,接下来是对各成员赋值。第一个printf语句用“.”的方式将obj1成员的值输出。第二个printf语句用(*p)将obj1成员的值输出,因为成员运算符“.”的优先级高于“*”运算符,所以(*p)两侧的圆括号不能省略。以上两个printf函数语句的输出结果是相同的。

可用p->name来代替(*p).name,其中“->”称为指向运算符,它由两部分组成:“-”减号和“>”大于号,它们之间不能有空格,所以“结构体变量.成员名”、“(*结构体指针变量名).成员名”和“结构体指针变量名->成员名”这3种形式是等价的。

小提示

一个结构体变量的指针就是用来指向该结构体类型的存储单元,并指向结构体变量所占据的内存段的首地址。

真题精选

以下程序的输出是(  )。

#include <stdio.h>

main()

{ struct s1{int x;int y;};

struct s1 a={1,3};

struct s1 *b = &a;

b->x = 10;

printf("% d % d\n",a.x,a.y);

A.13    B.103    C.310    D.31

【答案】 B

【解析】b为指向结构a的指针,通过→运算符改变了a成员x的值为10,所以输出103

教程类别