结构体共同体复习

合集下载

C语言程序设计精品讲义第7章 结构体与共同体

C语言程序设计精品讲义第7章 结构体与共同体

{
struct student s1 ;
s1.num = 99010101 ;
= “wang hai” ; s1.score = 99 ;
结构变量。
mprintp ( &ss11 ) ;
指向结构的指针。
}
void mprintp (pv )
⒌结构数组
结构变量也可以构造成数组,称为结构数组。每个数组元素都 是一个结构变量,都含有结构成员项。它们在内存中的地址是连续 的。
数组的说明:
struct 结构名 结构数组名 [常量表达式] ;
struct student{
long num ; char name[20] ; float score ; } stud[3] ;
结构和联合的操作分为三个步骤:
⑴根据需要定义结构或联合类型; ⑵通过定义的类型说明变量、数组、指针; ⑶引用变量、数组元素和指针指向的对象。
7.1 结 构 体
⒈结构类型的定义
格式:
用标识符命名的结构类型名。
struct 结构名{ type 成员项1 ; type 成员项2 ;
结构标志。…
结构类型中所含的成员 项及其类型。
⑴传递一个结构指针(效率高)。 ⑵传递一个结构变量(效率低)。
#include<stdio.h>
void mprintp (struct student )* ;) ;
struct student { long num ;char *name ;float score;} ;
void main ( )
说明: ⑴注意类型和变量的区别。 ⑵成员项可单独使用。wang.age=20 ⑶结构的成员项也可以是结构变量。

C语言题库第8章 结构体和共同体

C语言题库第8章 结构体和共同体

第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。

则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。

3. 下面程序的运行结果是( D )。

#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。

第11章结构体和共同体

第11章结构体和共同体

6
2011-7-18
11.1 结构体
11.1.2 结构体变量的定义与初始化 1. 结构体类型变量的定义 在定义结构体类型的同时定义变量 struct 结构体名
{ 成员定义表; 成员定义表; }变量名表; 变量名表; 例如: 例如:
7
struct student { char num[8],name[20],sex; num[8],name[20],sex; int age; age; float score; score; }st[30]; st[30]
按照结构体类型的组成, 按照结构体类型的组成,系统为定义的结构体 变量分配内存单元。 变量分配内存单元。结构体变量的各个成员在内存 中占用连续存储区域,结构体变量所占内存大小为 所占内存大小 中占用连续存储区域,结构体变量所占内存大小为 结构体中每个成员所占用内存的长度之和 每个成员所占用内存的长度之和。 结构体中每个成员所占用内存的长度之和。
C 语言程序设计
第11章 结构体与共用体 11章
浙江林学院 信息工程学院
11.1 结构体
11.1.1 结构体与结构体类型的定义 信息管理
2
一个学生的信息有学号、姓名、性别、年龄、住 一个学生的信息有学号、姓名、性别、年龄、 学号 成绩等 址、成绩等。 分类编号、 一本图书的信息有分类编号 书名、作者、 一本图书的信息有分类编号、书名、作者、出版 出版日期、价格、库存量等 社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据? 如何描述这些类型不同的相关数据? 结构体——一种构造类型数据 结构体 一种构造类型数据 结构体由若干不同类型的数据项组成, 结构体由若干不同类型的数据项组成, 由若干不同类型的数据项组成 构成结构体的各个数据项称为结构体成员 结构体成员。 构成结构体的各个数据项称为结构体成员。

C语言结构体与共同体

C语言结构体与共同体

C语言结构体与共同体C语言中结构体和共同体是两种用于组织和管理数据的重要概念。

它们可以帮助程序员更有效地管理和操作数据,提高程序的可读性和可维护性。

一、结构体(Structures)结构体是一种由不同类型的数据成员组成的数据类型,它允许程序员将不同类型的数据组织在一起并使用一个名称来引用它们。

结构体可以包含各种数据类型,例如整数、字符、数组或甚至其他结构体。

结构体的定义通过使用关键字struct来实现。

例如,下面的代码定义了一个名为Person的结构体,其中包含姓名、年龄和性别这三个成员:```cstruct Personchar name[50];int age;char gender[10];};```结构体定义可以在程序的任何地方,通常在函数外部定义,使得它在整个程序中都可见。

结构体的创建和初始化可以使用以下格式:```cstruct Person p1; // 创建名为p1的结构体变量struct Person p2 = {"John", 25, "Male"}; // 创建名为p2的结构体变量并初始化其成员```结构体成员可以通过`.`操作符来访问,例如:```cprintf("Name: %s\n", );```结构体可以作为函数的参数传递,也可以作为函数的返回值。

通过传递结构体作为参数,可以避免传递多个参数,提供了一种有效地传递多个相关数据的方法。

例如,下面的代码演示了一个函数,该函数接受一个名为p的Person结构体作为参数,并打印出其成员的值:```cvoid printPerson(struct Person p)printf("Name: %s\n", );printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender);```二、共同体(Unions)共同体是一种特殊类型的结构体,它允许不同类型的成员共享同一块内存空间。

《C语言程序设计》第八章 结构体、共同体和枚举

《C语言程序设计》第八章 结构体、共同体和枚举

{ max=stud[ i ].score;temp= i;} p=stud + temp; printf ( “\n The maximum score:\n” ); printf ( “No:%d \nname:%s\nscore:%4.1f\n”,p->num,p->name,
p->score );
}a ;
main() { a.ch[ 0 ]=13;
a.ch[ 1 ]=0;
printf (“%d\n”,a.i );
}
A. 13
B. 14
C. 208
D. 209
8.10 下面对 typedef 的叙述中不正确的是( )。 A.用 typedef 可以定义各种类型名但不能用来定义变量 B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的标识符来代表 D.使用 typedef 有利于程序的通用和移植
对后一种举例如下: struct student {┇
}; struct student stud,arr[3],*p; 结构体变量的引用有三种形式:
106
第八章
结构体、共同体和枚举
1. 结构体变量名.成员名 2. (*指针变量名).成员名 3. 指针变量名->成员名 其中圆点(.)称为成员运算符,箭头(->)称为结构 指向运算符,C 语言中,圆点运算符和箭头运算符都是优先 级最高的运算符。 结构体变量的输入和输出,它必须按成员项逐个地输入 或输出,不能将结构体变量作整体地输入或输出。 共用体类型,是指将不同的成员项存放于同一段内存单 元,共用体的大小与其组成成员中字节数最大的那个成员相 同。共用体变量的定义与引用类似于结构体变量的定义与引 用。枚举类型指明这种类型的变量取值只能是指定的若干个 枚举常量之一。每个枚举常量代表一个具体的值。 用 typedef 可定义新的类型名来代替已有的类型名。其方法如下: 1. 先按定义变量的方法写出定义体; 2. 将变量名换成新类型名; 3. 在最前面加上 typedef; 4. 用新类型名去定义变量。

第9章 结构体和共用体重点讲义资料

第9章  结构体和共用体重点讲义资料

第9章结构体和共用体9.1 结构体【学习目标】(1)掌握结构体的类型定义方法(2)掌握定义的结构体类型变量和指针变量的引用方法(3)掌握结构体类型数组的定义及数组元素的引用实例45 结构体类型变量、指针变量的定义与引用——我的个人信息【实例任务】定义一个结构体类型,然后定义两个自定义结构体类型的变量,通过引用这两个变量输出个人信息。

程序的运行结果如图9-1所示。

图9-1 程序运行结果1.结构体类型的定义前面学过众多的类型定义符,它们的共同特点定义的变量在内存中的空间大小都是固定的。

现实生活和工作中,这种单一表现有很大的局限性,结构体类型是在应用原有类型的基础上,用户构造的一种类型,其成员丰富,引用时可以整体引用。

以前学过的数组在定义后所有数组元素都属同一类型,而本章所学结构体各个成员可以是不同类型。

它的定义形式为:struct 结构体标识符{类型名成员变量名1;类型名成员变量名2;………类型名成员变量名n;}这里,struct是定义结构体类型的关键字,结构体标识符要求是合法的C语言标识符。

实例中,定义了一个记录个人信息的结构体,有num、name、sex、score这4个成员。

2.结构体类型的变量和指针变量的定义结构体类型的变量定义方法有多种。

可以在定义结构体的同时定义结构体类型的变量;也可以先定义结构体类型,然后再定义相应的变量;也可以通过typedef关键字先为定义的结构体类型命个新名字,再用新名字定义结构类型的变量。

对于结构体类型的变量,定义时在内存空间中为其分配存储空间,分配时按先后顺序连续分配,所占空间总的大小为所有成员所占空间大小的和值。

实例中,是在定义的同时,为结构体类型命个新名字STU,然后用新名字直接定义结构体类型的变量和指针变量,这样多次定义时比较简洁。

struct stu{int num;char *name;char sex;float score;}s,*p;以上程序段是在定义结构体类型的同时定义结构体类型的变量struct stu{int num;char *name;char sex;float score; };struct stu s,*p;以上程序段是先定义好结构体类型,然后再单成立一条语句定义结构体类型的变量。

计算机二级C语言 结构体与共同体

计算机二级C语言 结构体与共同体

第九章结构体和共用体【本章要求】1、结构体类型的定义方法和数据的引用,尤其是结构体成员中含有数组的用法2、访问通过结构体类型建立的单链表,并对链表中的结点进行插入、删除操作3、共用体类型的定义和引用,尤其是队成员的覆盖赋值方式。

9.1 结构体9.1.1概念结构体是一种构造数据类型,用于把不同类型的数据组合成一个自定义的数据类型。

9.1.2结构体类型定义结构类型定义的一般形式是:struct <结构类型名>{ <成员类型标识符><空格><成员名表列>;<成员类型标识符><空格><成员名表列>;<成员类型标识符><空格><成员名表列>;} [<变量名列表>];【说明】1、struct是关键字,不能省略2、<结构类型名>为合法标识符,但可省略(即无名结构体)3、<成员名表列>是由一个或多个成员名(又称为成员变量)组成,当成员名不止一个时,用逗号分隔。

4、结构可由多个成员名组成,成员名可以是由<成员类型标识符>确定的相同的或不同的数据类型,可以是基本类型或构造类型。

5、<变量名列表>可为空。

举例说明:struct student {int num;char name[20];char sex;int age;float score;char addr[30];};【说明】namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节……..- 113 -《C 语言程序设计》- 114 - 1、结构体类型定义的作用域取决于其定义位置2、结构体类型定义仅仅描述结构的组织形式,并不分配内存。

9.2 结构体变量9.2.1结构体变量的定义一、方式一先定义结构体类型,再定义结构体变量。

举例说明如下:1、一般形式:struct student stu1, stu2;2、若有宏定义:#define STUDENT struct student则可为:STUDENT stu1, stu2; 二、方式二定义结构体类型的同时定义结构体变量。

C语言学习入门笔记之结构体与共用体

C语言学习入门笔记之结构体与共用体

结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。

在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。

上面的结构体声明中Student就是结构体名(结构体标记)。

2.花括号内是该结构体所包括的子项,称为结构体的成员。

“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。

例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。

计算机C语言教程第10章结构体和共同体

计算机C语言教程第10章结构体和共同体

2. 在函数内部的结构体变量进行初始化 上面例子的定义部分可以放到 main 函数中。程 序如下:
main( ) { static struct student { long hum; char name[20]; char sex; char addr[40];
}a={3021103, ”Jiang Linpan”,’M’, ”123 Shaoshan Road”};
/*成员变量是一个结构体变量*/
先定义一个struet date结构体类型,它包括3 个成员: month 、 day 、 year ,分别代表月、日、 年。然后在定义struet member结构体类型时,成 员 birthday 的类型定义为 struet date 类型。已定义 的类型struct date与其他类型 ( 如 int、 char) 一样可 以用来定义成员的类型。
实际上,凡是相关的若干数据对象都可组合成一个结 构体,在一个结构体名下进行管理。例如,由日、月、 年组成的结构体类型为: struct date {
int day;
int month;
int year;
};
又如,某职工信息结构体类型为: struct person { char name[20]; char address[40]; float salary; float cost; struct date hiredate; }; /*姓名*/ /*地址*/ /*工资*/ /*扣款*/ /*聘任日期*/
其中,结构体类型struct person含有一个结构体类型 成员hiredate。 该例子说明结构体类型可以嵌套定义,即一个结构 体类型中的某些成员又是其他结构体类型。但是这 种嵌套不能包含自身,即不能由自己定义自己。 结构体类型说明中,详细列出了一个结构体的组成 情况、结构体的各成员名及其类型。结构体类型说 明了一个数据结构的“模式”,但不定义“实物”, 并不要求分配实际的存储空间。 程序要实际使用结构体,必须定义结构体变量。编 译程序在为结构体变量分配存储空间时,其中各成 员的存储格式及其意义与结构体类型保持一致。

14.11 第 11章 结构体与共同体_C语言程序设计实验指导 (第2版)_[共8页]

14.11  第 11章  结构体与共同体_C语言程序设计实验指导 (第2版)_[共8页]

平均成绩。
#include <stdio.h> struct student { int num; int midscore; int finalscore; float ave; }stud1; void main() {
printf("please input the num,midterm score,final score\n"); scanf("%d%d%d",&stud1.num,&stud1.midscore,&stud1.finalscore); stud1.ave=(stud1.midscore+stud1.finalscore)/2.0; printf("The average score is %5.2f\n",stud1.ave); }
【3】结构体
【4】struct node *
【5】p=(struct aa *) malloc (sizeof (struct aa));
【6】28
【7】s.birth.year=1984; s.birth.month=11; s.birth.day=12;
【8】51
四、编程题
【1】用结构体类型编写程序。输入一个学生的学号、数学期中和期末成绩,然后计算并输出
第 14 章 《C 语言程序设计》习题参考答案
14.11 第 11 章 结构体与共同体
一、选择题
【1】B
【2】A
【3】A
【4】B
【5】B
【6】C
【7】A
【8】B
【9】B
【10】B
二、判断题
【1】
【2】√
【3】√
【4】

第11章 结构体和共同体

第11章 结构体和共同体

10101 Lilin
10102 Wang
10103 Zhang
F
F
20
21
C 程 序 设 计 第 十 一 章 结 构 体 共 用 体
2、用结构体变量和构体变量的成员作函数参数(值传递) struct student { int num; char name[20]; float score; }stu1,stu2;
(1) 类型与变量是不同概念;
(2) 对结构体成员可以单独使用,相当于普通变量; (3) 成员也可以是一个结构体变量(结构体嵌套); (4) 成员名可以和程序中的变量名相同,互不影响;
C 程 序 设 计 第 十 一 章 结 构 体 共 用 体
二、结构体变量的引用
结构体变量名.成员名 如:; ※ 关于结构体变量的几点说明: (1) 不能将结构体变量作为一个整体进行输入输出; (2) 如果成员又是一个结构体类型,则要用若干个成员
int main() void f(int a,char x[], float s) { { student a; … … f(a.num,,a.score); } }
C 程 序 设 计 第 十 一 章 结 构 体 共 用 体
(2) 用结构体变量作函数参数(值传递) int main() { student a; … f(a); } void ( student b) {

}
(3) 用指向结构体变量的指针作函数参数(传地址) int main() { student a,*p; p=&a; … f(p); } void ( student *pt) {

}
C 程 序 设 计 第 十 一 章 结 构 体 共 用 体
例11.5 有n个结构体变量,内含学生学号、姓名和3门课 程的成绩。要求输出平均成绩最高的学生的信息(包括学 号、姓名、3门课程成绩和平均成绩)。 • 用input函数输入数据和求各学生平均成绩 • 用max函数找平均成绩最高的学生

C语言期末复习整理 结构体、联合体、枚举

C语言期末复习整理 结构体、联合体、枚举

C语⾔言 - 结构体、联合体、枚举struct - 结构体结构体是由⼀一系列列具有相同类型或不同类型的数据构成的数据集合。

定义结构体结构体可以定义在主函数外,也可以定义在主函数内。

和定义函数⼀一样,只有在定义下⽅方的代码才能够识别,在上⽅方的代码需要申明之后再使⽤用。

结构体的定义⽅方式如下:struct结构体名称{变量量类型变量量名;变量量类型变量量名;...}结构体变量量名;例例如⼀一个统计学⽣生成绩的结构体,它包含了了 id, name, math_score, c_score, english_score 等内容:struct stu{char id[20];char name[20];double math_score;double c_score;double english_score;}s[10];定义完结构体之后,我们就可以在其他地⽅方使⽤用:struct stu a;结构体变量量struct stu *p结构体指针struct stu s[10];结构体数组struct stu func()返回⼀一个结构体类型的函数结构体的赋值在初始化时,我们可以直接通过{和}来为结构体赋值,赋值的顺序就是定义的顺序:struct stu a = {"123", "Aaron", 77, 89, 88};struct stu b[2] = {{"456", "Candy", 87, 86, 72}, {"789", "David", 67, 99, 78}}在初始化之后,我们就不能够直接对结构体进⾏行行整体赋值了了,⽽而只能⼀一次修改其中的某⼀一项值:struct stu *p, a = {"123", "Aaron", 77, 89, 88};p =&a; // p为结构体指针a.math_score =79; // 结构体变量量使⽤用.来访问内容(*p).c_score =87;p->english_score =92; // 结构体指针可以使⽤用->来代替(*p).访问内容printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);两个同类型的结构体变量量是⽀支持赋值的,比如下⽅方的代码就直接将 b 的每个元素的值赋给了了 a :struct stu a = {"456", "Candy", 87, 86, 72};struct stu b = {"789", "David", 67, 99, 78};a = b;printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);union - 联合体联合体的定义⽅方法与规则与结构体类似,因此这⾥里里就不再重复。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

说明: (1)类型与变量是不同的概念, 编译时只给变量分配存储空间, 不对类型分配 存储空间.
(2)结构体可以嵌套定义, 即结构体成员可以是另一个类型的结构体变量. 例如: struct date {int month; int day; int year; }; struct student {int num; char name[10]; struct date birthday; char addr[30]; };
(2)在定义结构体类型的同时定义变量, 格式为: struct 结构体类型名 {成表 } 结构体变量表;
例如: struct student {int num; char name[20]; int age; char addr[30]; } stu1,stu2;
它的作用与(1)中的定义完全相同, 既定义了结构体变量stu1, stu2, 也定 义了结构体类型:struct student, 还可以用该结构体类型定义其它的结构 体变量.
(3)如果成员本身又属于另一个结构体类型, 则要用若干成员 运算符一级一级地找到最低一级的成员. 只能对最低一级的成员 进行赋值、存取、运算。
例2: struct date {int month, day, year; }; struct student { int num; char name[10], addr[30]; struct date birthday; };
(4)可以引用成员的地址, 也可以引用结构体变量的地址 例如: scanf(“%d”, &st1.num); printf(“%p”, &st1);
/*输入整型数赋给st1.num*/ /*输出st1的地址*/
4.结构体变量的初始化 结构体变量的初始化的格式类似于数组的初始化. (1)对外部存储类型的结构体变量进行初始化 例3:struct student {int num; char name[20]; int age; char addr[20]; } st={23, "zhang Fan", 19, "Dept. of CS, BNUZhuhai"};
printf("%d %s %d %s", stu.num, , stu.age, stu.add); }
5.结构体数组
结构体数组可以存放相同结构体类型的一组数据. 结构体数组的定义方式, 以及元素的引用方法与数组的操 作类似.所不同的是, 结构体数组的元素不是一个简单类型的 数据, 而是一个结构体类型的数据, 它们都包含同样的多个 成员. 定义结构体数组的格式为: 结构体类型名 数组名[常量表达式]; 引用结构体数组的方式为: 数组名[下标].成员名
2. 结构体类型变量的定义
结构体类型的变量在使用之前必需先定义。
在定义该结构体类型的结构体变量之前, 需要先定义结构体类型. 1)定义结构体类型 定义结构体类型的格式为: struct 结构体类型名 {成员表 } 花括号内的成员表为一组变量定义的语句,它们定义该结构体类型的成 员的名称和类型,可以是C语言允许的所有基本类型。
6.指向结构体类型数据的指针 一个结构体变量的指针就是该变量所占据的存储空间的起 始地址, 可以定义一个指针变量, 专门用来存放结构体变量的 地址, 即定义指向结构体变量的指针变量. 1)指向结构体变量的指针 定义格式为: struct 结构体类型名 *变量名;
如: struct student *p;
圆点操作符是优先级最高的运算符之一, 可以把结构体成员 作为一个整体来看待.
例如, 对于上面定义的结构体变量stu1: stu1.num 可以看作为一个整型变量, 可以看作为一个字符型数组的首地址.
所以, 以下操作都是合法的. stu1.num=29; printf(“%d”, stu1.num); gets(); for(j=0;j<20;j++) putchar( [j]);
例5:(教材P266例11.2)统计三个候选人的的票数. 先定义一个结构体类型, 包含姓名和得票数两个成员. #include “string.h” struct person {char name[20]; int count; } leader[3]={{"li", 0},{"zhang",0},{"fang",0}}; main() {int i; char leadername[20]; do{ printf("\ninput a leadername: "); gets( leadername); for(i=0; i<3; i++) if(strcmp(leadername, leader[i].name)==0) { leader[i].count++; break; } }while(strcmp(leadername,“$”));/*输入$结束,非零值为真*/ for(i=0;i<3;i++) printf("\n%s %d", leader[i].name, leader[i].count); }
程序中printf函数中用格式: (*p).成员 引用结构体成员,(*p)表示p指向的结构体变量, *p两 侧的括号不能省.
C语言提供了用指针变量引用结构体成员的运算符: ->
例如: p->num 等价于 (*p).num p->name 等价于 (*p).name
3)用指向结构体变量的指针作函数的参数
main() {struct student st1; st1.num=29; gets(); st1.birthday.month=5; st1.birthday.day=17; st1.birthday.year=1980; printf(“\n%d ”,st1.num); printf(“%s”, ) printf(“%d年”, st1.birthday.year); printf(“%d月”, st1.birthday.month); printf(“%d日”, st1.birthday.day); }
(3)直接定义结构体变量, 不定义结构体类型名. 格式为: struct {成员表 } 结构体变量表;
例如: struct {int num; char name[20]; int age; char addr[30]; } stu1,stu2; 这种方式定义的结构体称为无名结构体类型. 由于没定义结构体类型名, 所以不能再次定义其它的结构体变量.
3.结构体类型的变量的引用 引用结构体类型的变量应遵守以下规则:
(1)对每个结构体成员的访问要通过原点操作符, 格式为: 结构体变量名.成员名
例如, 对于以下定义的结构体变量stu1: struct {int num; char name[20]; int age; char addr[30]; } stu1; 引用变量的成员的方式为: stu1.num …
2)定义结构体类型的变量
定义结构体类型的变量可以采用三种方式: (1)先定义结构体类型, 再用定义好的结构体类型用来定义结构体变 量. 定义格式为: struct 结构体类型名 结构体变量表; 例如: struct student {int num; char name[20]; int age; char addr[30]; }; struct student st1, st2; 定义了两个结构体struct student类型的变量st1, st2.
例9:(教材p.271,例11.5) struct student /*外部类型*/ { char name[20]; int num; float score[3]; }; void print( struct student *p ) /*指针做形参*/ { printf("\n%d\t%s\t%f %f %f", p->num, p->name, p->score[0], p->score[1], p->score[2] ); } main() { void print(); struct student stu; stu.num=12345; strcpy(,"zhang Fan"); stu.score[0]=77.5; stu.score[1]=88.0; stu.score[2]=92.0; print( &stu ); /*实参传递地址*/ }
stu2=stu1;
printf(“%d %d”, stu1.num, stu1.age); printf(“%s %s”, , stu1.addr); printf(“%d %d”, stu2.num, stu2.age); printf(“%s %s”, , stu2.addr); printf(“\n%d %s %d %s”, stu1); /*错误的*/ }
将一个结构体变量的值传给另一个函数可以有两种方式: (1)用结构体变量作函数的参数. (2)用指向结构体变量的指针作函数的参数, 把结构体变量的 地址传给被调函数.
下例程序中, struct student 被定义为外部类型, 这样在同一 源文件中的各个函数都可以用它来定义变量的类型. print()函数的形参为指向结构体类型的指针变量,所以主 函数中调用该函数时, 实参是结构体变量的地址.
(2) 可以将一个结构体变量直接赋给另一个具有相同 结构体类型的结构体变量 , 但不能将一个结构体变量作 为一个整体进行输入输出.
例1 main() { struct { int num, age; char name[20], addr[30]; } stu1, stu2;
stu1.num=29; stu1.age=18; gets(); gets(stu1.addr);
相关文档
最新文档