全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章.ppt

全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章.ppt

全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章

五、函数之间结构体变量的数据传递 1、向函数传递结构体变量的成员 结构体变量中的每个成员可以是简单变量、数组或指针变量等,作为成员变量,它们可以参与所属类型允许的任何操作。 2、向函数传递结构体变量 结构体变量作实参时,传递给函数对应形参的是它的值,函数体内对形参结构体变量中任何成员的操作,都不会影响对应实参中成员的值。 3、4、传递结构体的地址 对应形参应是一个基类型相同的结构体类型的指针变量,系统给此指针分配一个存储单元即可,存储实参地址值。 5、函数的返回值是结构体类型(例14.3) 6、函数的返回值可以是指向结构体变量的指针类型(例14.4) 六、利用结构体变量构成链表 1、结构体中含有可以指向本结构体的指针成员 当一个结构体中有一个或多个成员是指针,它们的基类型就是本结构体类型时,通常把这种结构体称为可以“引用自身的结构体”。 如: struct link { char ch; struct link *p; }a; p是一个可以指向struct link类型变量的指针,因此a.p=a是合法的表达式。 建立链表 见例14.6。 2、建立带有头结点的单向链表 (1)建立单向链表 见例14.7。 (2)顺序访问链表中各结点的数据域 见例14.8。 (3)在单向链表中插入结点 见例14.9。 (4)删除单向链表中的结点 练习:有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是____。 struct node{ char data; struct node *next; }a,b,*p=a,*q=b; A)a.next=q; B)p.next=b; (a).next=b C)p-next=b; D)(*p).next=q; √ 练习:下面程序执行后的输出结果是____。 struct NODE{int num; struct NODE *next;}; main() {struct NODE *p,*q,*r; p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p-num=10; q-num=20; r-num=30; p-next=q; q-next=r; printf(“%d”,p-num+q-next-num); } A)10 B)20 C)30 D)40 √ 练习:下面程序执行后的输出结果是____。 struct NODE{int num; struct NODE *next;}; main() {struct NODE s[3]={{1,’\0’},{2,’\0’},{3,’\0’}},*p,*q,*r; 给指针赋空值 int sum=0; s[0].next=s+1; s[1].next=s+2; s[2].next=s; p=s; q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d”sum); } A)3 B)4 C)5 D)6 √ struct NODE*s=s[0] s[0].next=s[0]+1=s[1] s[1].next=s[0]+2=s[2] s[2].next=s[0] p=s[0] q=s[0].next=s[1] r=s[1].next=s[2] sum=0+s[1].next-num =0+s[2].num=3 sum=3+s[2].next-next-num =3+s[0].next-num =3+s[1].num=5 2011年下半年真题:有以下程序 #include stdio.h main() { struct node{int n; struct node *next;} *p; struct node x[3]={{2,x+1},{4,x+2},{6,NULL}}; p=x; struct node*x=x[0]   printf(“%d,”,p-n); (x[0])-n x[0].n printf(“%d\n”,p-next-n);} 程序运行后的输出结果是 A) 2,3 B) 2,4 C) 3,4 D

文档评论(0)

1亿VIP精品文档

相关文档