第23讲 结构体类型的变量、数组、指针、函数

更新时间:2023-05-31 03:10:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

结构体类型的变量、数组、指针、函数

第讲结构体类型的变量,数组,指针,函数

结构体类型的变量、数组、指针、函数

第十一章 结构体与共用体11.1 结构体类型结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自 定义数据类型 合法标识符 一,结构体类型的定义 可省:无名结构体struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };

struct是关键字, 不能省略

成员类型可以是 基本型或构造型

结构体类型的变量、数组、指针、函数

例:结构体类型的定义 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };num 2字节

… …..

name sex age score

20字节 1字节 2字节 4字节

addr

30字节

结构体类型定义的作用域与 变量的作用域类似,若将类 型定义放在某个函数内,则 只能在该函数内定义这种结 构体类型的变量.

结构体类型定义只描述结构 的组织形式,不分配内存.

结构体类型的变量、数组、指针、函数

二,结构体变量的定义

1. 先定义结构体类型,再定义结构体变量一般形式: struct结构体名 {类型标识符 成员名; 类型标识符 成员名; ……………. 例 #define STUDENT struct student }; STUDENT struct 结构体名 变量名表列;

{ int num; 例 struct student char name[20]; { int num; char sex; char name[20]; int age; char sex; float score; int age; char addr[30]; float score; }; char addr[30]; STUDENT stu1,stu2; }; struct student stu1,stu2;

结构体类型的变量、数组、指针、函数

2. 定义结构体类型的同时定义结构体变量

一般形式: struct{

结构体名

类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;

例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

结构体类型的变量、数组、指针、函数

3. 直接定义结构体变量

一般形式:

struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 用无名结构体直接定义 变量只能一次

例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

结构体类型的变量、数组、指针、函数

说明: 结构体类型与结构体变量概念不同.类型:不分配内存; 类型:不能赋值,存取,运算; 变量:分配内存 变量:可以

结构体类型可以嵌套定义. 结构体成员名与程序中变量名可相同,不会混淆. 结构体类型及变量的作用域与生存期. 例 struct date 例 struct student { int month; { int day; int num; char name[20]; int year; }; struct date { int month; struct student int { int num; day; int year; char name[20]; }birthday; struct date birthday; }stu; }stu;

num num

birthday name month birthday year day name month day year

结构体类型的变量、数组、指针、函数

三,结构体变量的引用

成员(分量)运算符 优先级: 15(最高) 结合性:从左向右

1. 引用方式: 结构体变量名.成员名 2. 引用规则:结构体变量不能整体引用,只能引用变量成员例 struct student stu1.num=10; { int num; char name[20]; char sex; 例 struct student stu1.score=85.5; if(stu1==stu2) int age; …….. { int num; (×) char name[20]; float sc

ore; stu1.score+=stu2.score; char addr[30]; stu1.age++; char sex; printf("%d,%s,%c,%d,%f,%s\n",stu1); (×) }stu1,stu2; int age; float score; stu1={101,"Wan Lin",'M',19,87.5,"DaLian"}; (×) char addr[30]; }stu1,stu2;

结构体类型的变量、数组、指针、函数

3. 结构体嵌套时应逐级引用 4. 结构体变量可以整体赋值给另一个结构体变量

例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2 ={101,"Wan Lin"};

num

birthday name month day year

stu1.birthday.month=12;stu1=stu2; (√) stu1={102,"Wan Lin"…}; (×)

结构体类型的变量、数组、指针、函数

四,结构体变量的初始化形式一: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据};

例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,"Wang Lin",'M',19, "200 Beijing Road"};

结构体类型的变量、数组、指针、函数

形式二:

struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};

例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,"Wang Lin",'M',19, "200 Beijing Road"};

结构体类型的变量、数组、指针、函数

形式三:struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};

例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,"Wang Lin",'M',19, "200 Beijing Road"};

结构体类型的变量、数组、指针、函数

11.2 结构体数组 一,结构体数组的定义 形式一: struct student { int 形式二: num; struct char name[20]; student { char num; int sex; 形式三: age; int name[20]; struct char }; char sex; int stu[2]; struct{ studentnum; int age; char name[20]; }stu[2]; sex; char int age; }stu[2];num 25B name sex age num name sex age stu[1] stu[0]

结构体类型的变量、数组、指针、函数

二,结构体数组初始化

例:定义类型时省略类型名 顺序初始化: 例:定义类型的同时,定义变量并初始化 struct student 分行初始化: struct student struct intstudent {{ structintnum; {{ char name[20]; int num; int num; num; char name[20]; char name[20]; char sex; char name[20]; char sex; intchar sex; age; char sex; int age; int age; }stu[ ]={{……},{……},{……}}; int age; }; }stu[ ]={{……},{……},{……}}; struct}; student stu[ ]={100,"Wang Lin",'M',20, struct student stu[ ]={{100,"Wang Lin",'M',20}, 101,"Li Gang",'M',19, {101,"Li Gang",'M',19}, 110,"Liu Yan",'F',19}; {110,"Liu Yan",'F',19}};全部初始化时维数可省

结构体类型的变量、数组、指针、函数

三,结构体数组引用

引用方式: 结构体数组名[下标].成员名

struct student { int num; char name[20]; char sex; int age; }str[3];

stu[1].age++;

strcpy(stu[0].name,"ZhaoDa");

结构体类型的变量、数组、指针、函数

例 统计后选人选票

struct person { char name[20]; int count; }leader[3]={"Li1",0, "Zhang2",0, "Wang3",0}; name void main() Li1 { int i, j; char leader_name[20]; Zhang2 for(i=1;i<=10;i++) Wang3 { scanf("%s",leader_name); for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].nam

e,leader[i].count); }

count 0 0 0

Ch10_2.c

结构体类型的变量、数组、指针、函数

11.3 指向结构体的指针 一,指向结构体变量的指针

存放结构体变量在 内存中的起始地址

1. 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p; struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;p num name sex age

stu

结构体类型的变量、数组、指针、函数

2. 使用结构体指针变量引用成员 (*结构体指针名).成员名 结构体指针名->成员名

指向成员运算符 优先级: 15 (最高) 结合方向:从左向右 例 指向结构体的指针变量 struct student stu1; struct student *p=&stu1; stu1.num=101; (*p).num=101; *p->num=101;

结构体类型的变量、数组、指针、函数

例 指向结构体的指针变量

main() {struct student { long int num; char name[20]; char sex; float score; }stu_1,*p; p=&stu_1; stu_1.num=89101; strcpy(stu_,"Li Lin"); p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }

结构体类型的变量、数组、指针、函数

二,指向结构体数组的指针Ch10_4.c

例 指向结构体数组的指针num struct student name { int num; sex char name[20]; age p+1 char sex; int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); } p

stu[0]

stu[1]

stu[2]

结构体类型的变量、数组、指针、函数

11.4 结构体与函数 1. 结构体类型变量可以作为函数实参

Ch10_60.c

struct data { int a, b, c; }; main() { void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); printf("Call Func()....\n"); func(arg); printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); } void func(struct data parm) { printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c); printf("Process...\n"); parm.a=18; parm.b=5; parm.c=parm.a*parm.b; printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c); printf("Return...\n"); }

本文来源:https://www.bwwdw.com/article/3v34.html

Top