第9讲 结构体指针结构体与函数.ppt

合集下载

结构体(C语言基础PPT)

结构体(C语言基础PPT)

7.2结构体数组
结构体数组的定义方式为:结构体类型 数组名[数组大 小]; struct book {long bookid; char name[20]; float price; }; struct book n[5];
与普通数组一样,可以在定义时对数组进行初始化: struct book {long bookid; char name[20]; float price; }; struct book n[5]={ {6003563,"EXPERT SYSTEMS",59.0}, {6003564,"Meditations",32.0}, {6003565,"The Secret",32.0},{6003566, "WUTHERING HEIGHTS",35.0},{6003567, "EMMA",15.8}};
结构体类型名与结构体变量名相同虽编译正确, 但一般不建议如此书写。例7-2:
#include <stdio.h> void main() {struct book {long bookid; char name[20]; float price; }book; scanf("%ld",&book.bookid); printf("%ld",book.bookid); }
例如: struct book { long bookid; char name[20]; float price; }; 这样就声明了一个结构体类型struct book,然后可以 用struct book来定义变量了。 注意: (1)结构体类型名的命名应遵循命名规则。 (2)结构体类型名不可以和它包含的基础类型名相同。

C语言程序设计全套教学教程完整版电子课件最全ppt电子教案

C语言程序设计全套教学教程完整版电子课件最全ppt电子教案

上一页 下一页
目录
8.1 指针的概念、定义和引用 8.1.1 指针的概念 8.1.2 指针变量的定义 8.1.3 指针变量的引用 8.2 指针与函数 8.2.1 指针变量作函数参数 8.2.2 返回值为指针的函数 8.2.3 通过指针调用函数
上一页 下一页
Hale Waihona Puke 目录8.3 指针与数组 8.3.1 指针与数组的关系 8.3.2 数组名作函数参数的指针解释 8.3.3 指针数组 8.3.4 多级指针 8.4 指针与字符串 8.4.1 字符串的表示形式 8.4.2 字符串指针作函数参数
2.汇编语言
汇编语言的指令与机器语言的指令基本上保持了一一对应的关系。与 机器语言比起来,汇编语言易记、易读、易检查、易修改,但却不能 被计算机直接识别和执行,必须由翻译程序翻译成机器语言程序后才 能执行。汇编语言仍然是面向特定计算机的语言,也仍然是低级语言
下一页
返回
1.1 程序设计语言概述
3.高级语言 高级语言是接近人类自然语言和数学语言的程序设计语言,具有以下
上一页 下一页
目录
5.2 do-while语句 5.3 for语句 5.4 break和continue语句 5.5 多重循环 5.6 综合应用举例 第6章 数组 6.1 数组概述 6.2 一维数组
上一页 下一页
目录
6.2.1 一维数组的定义 6.2.2 一维数组的引用 6.2.3 一维数组的初始化 6.2.4 一维数组的程序举例 6.3 二维数组 6.3.1 二维数组的定义 6.3.2 二维数组的引用 6.2.3 二维数组的初始化
翻译成目标程序,然后执行该目标程序。解释方式是把源程序逐句翻
上一页 下一页 返回
1.1 程序设计语言概述

C语言结构体与指针PPT课件

C语言结构体与指针PPT课件
区分:*运算符在不同场合的作用,编译器能够根据 上下文环境判别*的作用。 int a,b,c; int * p; (*表示定义指针) p = &a; *p = 100; (*表示指针运算符) c = a * b; (*表示乘法运算符) printf(“%d \n” ,*p) ;
二、指针变量
例: 使两个指针变量交换指向。 main( )
(2)也可以在定义指针变量的同时指定其初值, 如:int a;
int *p = &a;
二、指针变量
3、指针变量的引用
取地址运算:如: int *p , i=3, j=5;
p=&i; /*让p其指向变量i */
对指针变量施加*运算,则代表取指针所指向的单
元的内容。 这里,*p与变量i是等价的。
二、指针变量
二、指针变量
p
p 1 2byte
P+1
2
P+2
3
P+1
P+3
4
3.14 4byte 2.12
二、指针变量
2、指针变量赋值(这里要用到取地址运算符“&”) 例: pointer_1 = &i;
pointer_2 = &j; 注意(1)指针变量中只能存放地址,不能将一个非
地址类型的数据(如常数等)赋给一个指针变量, 如:pointer_1 = 100;
变量的值始终等于某个变量的地址,如同某个房
间号、门牌号一样?
这种存放某种变量 地址的变量称为指针变量。
因此,在C语言中,将地 址形象化地称为指针
2010 10
a
2012 35
b
….
2010 p 2012 q

C语言——指针

C语言——指针

4. 结论: 若要使变量的值通过函数调用而发生改变, 则形参必须是指针型,实参为地址量(&<变量名>)
或指针型。
另:全局变量和数组名作为参数也可改变变量的值.
总 结
若要使n个变量的值通过函数调用而发生改变,则
在主调函数中设n个变量,用n个指针变量指向它们。 将这些指针变量作为实参,将其地址传递给被调函
p1 p &a p2 &b p1 &b p2 &a
a 5
b 9
a 5 b 9
}
5,9 9,5
三、指针变量作为函数参数 前面讲过:数值型变量作为函数实参 形参数据值的改变不会影响实参。 但当用地址(指针变量)作参数时,作用为传址, 与数组名类似。 要求:形参、实参均为地址量。
单向 传递
形参,于是,
例:实现10.2 swap(int *p1, int *p2) { int temp; temp=p1; p1=p2;p2= temp; } #include <stdio.h> void main( ) { int a, b;
它代表的是地址+1个单位
重要概念: 指针变量也有各种类型(如上面所示),但指针变 量的值只能是整型值。
二、指针变量的引用方式 *指针变量名----表示所指变量的值。 指针变量名----表示所指向变量的指针(地址)。
两个运算符号:
&: 取地址运算符。 &i *: 指针运算符,取其指向的内容(所指变 量的值)。 *p
9,0,10
10,9,0
§10.3 数组与指针
一个变量的地址为该变量的指针。当用一个变 量来存放地址(指针)时,该变量称为指针变量。
一个数组元素相当于一个简单变量。于是,亦 可用一个指针变量来指向数组元素。

台州学院C语言程序设计课件——结构体

台州学院C语言程序设计课件——结构体

例: struct Grade_Info { int score; struct Grade_Info *next; }; typedef struct Grade_Info NODE; NODE;
2、线性链表的基本操作 基本操作有:创建、插入、删除、输出和销毁等 基本操作有:创建、插入、删除、输出和销毁等。 链表的创建操作 含义:从无到有地建立起一个链表, 含义:从无到有地建立起一个链表,即往空链表中依次 插入若干结点,并保持结点之间的前驱和后继关系。 插入若干结点,并保持结点之间的前驱和后继关系。 基本思想:首先创建一个头节点,让头指针head和尾指 基本思想:首先创建一个头节点,让头指针head和尾指 tail都指向该节点 并设置该节点的指针域为NULL( 都指向该节点, 针tail都指向该节点,并设置该节点的指针域为NULL(链尾 标志);然后为实际数据创建一个节点,用指针pnew指向它 );然后为实际数据创建一个节点 指向它, 标志);然后为实际数据创建一个节点,用指针pnew指向它, 并将实际数据放在该节点的数据域,其指针域置为NULL; 并将实际数据放在该节点的数据域,其指针域置为NULL;最 后将该节点插入到tail所指向节点的后面 同时使tail指向 所指向节点的后面, 后将该节点插入到tail所指向节点的后面,同时使tail指向 pnew所指向的节点 pnew所指向的节点。 所指向的节点。
以分号; 以分号;结尾
//学号 //学号 //姓名 //姓名 //性别 //性别 //年龄 //年龄 //班级 //班级 //成绩 //成绩
例 2: struct Date { int year; //年 //年 int month; //月 //月 int day; //日 //日 };
2、结构体变量的定义和引用 结构体变量的定义 间接定义法:先定义结构类型,再定义结构变量 间接定义法:先定义结构类型,

C语言的指针和结构体PPT课件

C语言的指针和结构体PPT课件

void main ()
{ int a=1, b=2 , *p1 , *p2 , *pt; a = 1; b = 2; *p1 = 1, *p2 = 2
p1 = &a ; p2 = &b;
a = 1; b = 2; *p1 = 2, *p2 = 1
printf ("a=%d, b=%d, *p1=%d, *p2=%d\n", a, b, *p1, *p2);
& : 取地址运算符,给出变量的地址。
int *p, a = 3;
p = &a; 把 a 的地址赋给 p,即 p 指向 a
p
a
&a
3
*p
//指针变量的类型和它所指向变量的类型相同
* :间接访问运算符,访问指针所指向的变量。
*p:指针变量 p 所指精向选P的PT课变件 量。
4
p
a
说明 int a = 3, *p;
(2) 在被调函数中,用指针类型形参接受该变量的地址
(3) 在被调函数中,改变精形选P参PT课所件指向变量的值
8
数组和地址间的关系
int a[100], *p; 数组名代表一个地
地址 内容
址,它的值是数
a 3000
组首元素的地址 a+1 3002
(基地址)
a+i 是距数组a的
a+i
基地址的第i个偏 移
地址 内容 数组元素
p = a;
p a 3000
a[0]

p+1 a+1 3002
a[1]
p = &a[0];
p+i a+i
a[i]

C语言-14-结构体 PPT课件

C语言-14-结构体 PPT课件
char cnhaamr en[a2m0]e;[20]; char scehxa;r sex; float fslcooartes[c2o]r;e[2]; }; struct}ssttuu1d=en{t"3st1u011=2{1"1321"0,"1W21a1n2g"L,"inW",a'Mng',5L6in,"8,3'M};',56, 83};
结构体类型与结构体变量
结构体类型与结构体变量概念不同
类型:不分配内存;
变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
struct student
{ char name[20];
结构体类型名
int num;
int age;
结构体类型名
char sex; float score;
结结构构体体变变量量名名
if(strcmp(name,stu[j].name)==0) stu[j].num++ ; }
printf("Name Depiaoshu:\n"); for(i=0;i<3;i++) printf("%5s%3d\n",stu[i].name,stu[i].num);}
typedef
P315
功能:用自定义名字为已有数据类型(别名)命名
struct 类型名 *变量名;
}*变量名;
struct studenstruct studsetnrtuct
{ char name[2{0]c;har nam{e[2c0h];ar name[20];
int num;

结构体PPT课件

结构体PPT课件
22
语言程序设计
如果希望输入或输出各成员的值,如何实现?
struct date {
int year; int month; int day; }birthday;
scanf(“%d”,&birthday); ()
.
printf(“%d”,birthday);
()
23
结构体变量成员引用原则
语言程序设计
m..gonghao,,m.gwgz);
printf("薪级工资:%.2f\n职务津贴:%.2f\n绩效工资:
%.2f\n",m.xjgz,m.zwjt,m.jxgz);
}
31
若从键盘输入m的各成员值:
语言程序设计
scanf("%s%s%f%f%f%f", m.gonghao,, &m.gwgz,&m.xjgz,&m.zwjt,&m.jxgz);
空间。必须定义结构体类型的变量,
系统才为分配内. 存空间。
11
语言程序设计
有三种方法可用来定义结构体变量: 1. 先声明结构体类型再定义结构体变量。
形式: struct 结构体名 { 成员列表 …… }; struct 结. 构体名 变量名表列;
12
语言程序设计
如: struct date {
int year; int month; int day; };
独立变量表示:
num name sex
age
score
address
数据项之间无关联 结构体变量表示:
num name . sex age
score
address
数据项为一个整10体!

软件技术基础之指针和结构体课件ppt课件

软件技术基础之指针和结构体课件ppt课件


从右图可知,指 针变量和一般变量一 指针变量pi 变量地址(指针)
量 地 址
样,仅仅是变量旳内




容为变量地址旳变量
变量i
变量值

而已。这里变量和指针变量旳类型必须一致。
针 变

一般而言,指针变量只能存储某一种数据类型旳 变量旳地址,由此可将指针变量分为:整型指针变量、 实型指针变量和字符型指针变量等等,指针变量旳类 型表白了其指向旳存储单元中存储旳数据旳类型。
另一种引用旳形式: 构 造指针变量名 组员名 定义:struct data * today; today 为指向该构造旳指针
可见,“”和“·”操作符分别使用在用指向构造旳 指针和用构造变量来访问构造中旳数据项(组员)时。
例:构造例程。
结 构 体小结
构造体是C语言中旳一种复杂(构造)类型,它是一种 被命名为一种标识符旳多种变量旳集合。构造旳定义拟定了 构造变量或构造指针旳格式,构造是软件设计中实现数据抽 象旳基础。
3、程序中一旦定义了一种变量,该变量在内存中就将 占用一定旳存储单元。变量占用旳存储单元总是n(n>0) 个连续旳字节,开始字节旳地址,就是变量旳地址也可 称为该存储单元旳首地址。
二、指针旳基本概念:
指针就是变量旳地址。与此相应,在C语言中使
用一类专门旳变量即指针变量来存储变量旳地址。
所以,指针变量是存储地址数据旳变量。
四、指针旳“&”、“*”和赋值运算:
1 、& 取地址运算和 * 引用运算 取地址运算符&旳作用是取变量旳地址。如:
& i 表达求变量 i 旳地址。 引用运算符 * 旳作用是取指针指向变量旳内容。

C语言结构体ppt课件

C语言结构体ppt课件
结构变量名 . 结构成员名
s1.num = 101; strcpy(, "Zhang"); nest_s1.addr.zip = 310015;
15
9.1.5 结构变量的使用
2. 结构变量的整体赋值 具有相同类型的结构变量可以直接赋值。
赋值时,将赋值符号右边结构变量的每一 个成员的值都赋给了左边结构变量中相应 的成员。 struct student s1 = {101, "Zhang", 78, 87, 85}, s2;
if(i == 1) max = s1;
/* 结构变量 操作 */
if(max.average < s1.average)
max = s1;
}
printf("num:%d, name:%s, average:%.2lf\n", max.num, ,
max.average);
return 0;
86} };
students[0] 101 Zhang 76 85 78
students[1] 102 Wang 83 92 86

……
………
students[49]
23
9.2.2 结构数组操作
结构数组元素的成员引用 ,其格式为:
结构数组名[下标] . 结构成员名
使用方法与同类型的变量完全相同:
for(i = 1; i <= n; i++){
printf("No.%d: ", i);
scanf("%d%s%d%d%d",&s1.num,,&s1.math,&s1.english,&s1.c

C语言结构体基本知识PPT课件

C语言结构体基本知识PPT课件
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”};
stu1.s…co…re.+. =stu2.(sc)ore;
cchhsaatrruancdatdmrd[e3a[0t2e]0;}]s;tu1,stu2f;loat score;
stu1.age++;
}stu1,scth{ua2r;isnet xm; onth;
scthua1r=a{d1d0r[13,0“]; Wan Lin”,‘M’,19,87.5,“DaLian”}; ()
第2页/共18页
– 直接定义结构体变量
一般形式:
struct
{ 类型标识符 成员名; 类型标识符 成员名; …………….
}变量名表列;
例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
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].name,leader[i].count); }

《结构体与链表》PPT课件

《结构体与链表》PPT课件

GROUP为结构体类型 PG为指向GROUP的指针类型
GROUP *pclub; struct club *pclub;
完整版ppt
20
期末考试要点
• 卷面总分:100
– 计算机基础(25分左右) – C 语言程序设计(75分左右)
• 最终成绩计算:
– 上机(20%)+作业(10%)+期中(10%)+ 期末(60%)
• C 语言的基本特点
–高级语言的特点
• 结构化、自然简洁、可移植性——设计效率好
–低级语言的优点
• 地址操作——程序执行效率高
–灵活性、自由度大——对程序员的要求高
• C语言程序的基本结构
–模块化 –非可执行/可执行
• 算法,基本特征是什么? • 流程图的基本构成,如何画流程图?
完整版ppt
23
运算符/表达式
• 链表是程序设计中一种重要的动态数据结构, 动态性体现为:
–链表中的元素个数可以根据需要增加和减少,不像 数组,在声明之后就固定不变;
–元素的位置可以变化,即可以从某个位置删除,然 后再插入到一个新的地方;
• 链表中的元素称为“节点”,每个节点包括两 个大的部分:数据部分和指向其它节点的指针;
• 单向链表通常有一个头指针,用于指向链表头; • 单向链表有一个尾节点,该节点的指针部分指
完整版ppt
7
用结构体指针变量作函数参数
struct data
{ int a, b, c; };
main()
{ void func(struct data *parm);
struct data arg;
arg.a=27; arg.b=3; arg.c=arg.a+arg.b;

《C语言》指针--ppt课件全文

《C语言》指针--ppt课件全文

说明: 这种方法可能会破坏系统的正常
工作状态,因为temp是一个指针变量 b 59
但是在函数中并没有给temp一个确定 的地址,这样它所指向的内存单元是 不可预见的,而对*temp的赋值可能 带来危害
swap2 &a p1
&b p2 随机值 temp
5?
ppt课件
11
例 6. 3 ③ #include <stdio.h> void swap3( int *p1, int *p2) { int *p;
p
*p = 12 ; printf (“%d\n” , *p ) ;
对a 重新赋值 等价于 a=12
2. & 与*
p =ห้องสมุดไป่ตู้&a ;
1010 152 a
&*p &(*p) &a *&a *(&a) *p a
ppt课件
6
3. *与 ++ , - -
int a = 2 , b = 5 , c , d , *p ; (1) p = &a ;
② 形参表列: 即指针变量所指向的函数的形参表列 ③ 格式中的小括号不能省略 2. 应用 (1) 让指针变量指向函数 pt = add ; 因为函数名为函数的入口地址, 所以直接将函数名 赋给指针变量即可 (2) 使用指针变量调用函数 格式 : (*指针变量名) ( 实参表列)
ppt课件
17
例 求一维数组中全部元素的和
因此我们可以定义一个指针变量, 让它的值等于 函数的入口地址, 然后可以通过这个指针变量来调用 函数, 该指针变量称为指向函数的指针变量
ppt课件
16
指向函数的指针变量

指针ppt课件

指针ppt课件

可以通过将数组名赋值给指针变量来 初始化数组指针,例如 int *p = arr; 其中 arr 是数组名。
指向数组的指针
指向数组的指针的概念
指向数组的指针是指向整个数组的指针,可以通过将数组 名赋值给指针变量来获取整个数组的首地址。
指向数组的指针的初始化
可以通过将整个数组名赋值给指针变量来初始化指向数组 的指针,例如 int (*p)[5] = &arr; 其中 arr 是包含 5 个整 数的数组。
指针乘法和除法
指针的乘法和除法运算在实际编程中很少使用,因为它们的意义不太 明确。
指针的关系运算
01
关系运算符
包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等
。这些运算符可以用于比较两个指针所指向的内存地址的大小关系。
02
大于和小于运算
比较两个指针所指向的内存地址的大小,如果第一个地址大于第二个地
06 指针的高级应用
动态内存分配
动态内存分配的概念
动态内存分配是指在程序运行时,根据需要动态地分配或释放内 存空间的过程。
动态内存分配的方法
常见的动态内存分配方法有malloc、calloc、realloc和free等函数 。
动态内存分配的注意事项
在动态内存分配时,需要注意内存对齐、内存碎片化、内存泄漏等 问题,以确保程序的正确性和稳定性。
二叉树操作
二叉树的概念
二叉树是一种树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点 。
二叉树的创建与遍历
二叉树的创建需要为每个节点分配内存,并设置左子节点和右子节点的指针;二叉树的遍 历包括前序遍历、中序遍历和后序遍历等,需要遵循二叉树的结构和特性进行操作。

C语言学习知识结构体(struct)常见使用方法

C语言学习知识结构体(struct)常见使用方法

C语言结构体(struct)常见使用方法基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

结构体定义:第一种:只有结构体定义[cpp]view plain copy1.struct stuff{2.char job[20];3.int age;4.float height;5.};第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义[cpp]view plain copy1.//直接带变量名Huqinwei2.struct stuff{3.char job[20];4.int age;5.float height;6.}Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:[cpp]view plain copy1.struct stuff{2.char job[20];3.int age;4.float height;5.};6.struct stuff Huqinwei;第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用[cpp]view plain copy1.struct stuff yourname;去定义第二个变量。

那么,附加变量初始化的结构体定义还可进一步简化出第三种:[cpp]view plain copy1.struct{2.char job[20];3.int age;4.float height;5.}Huqinwei;把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。

结构体变量及其内部成员变量的定义及访问:绕口吧?要分清结构体变量和结构体内部成员变量的概念。

就像刚才的第二种提到的,结构体变量的声明可以用:[cpp]view plain copy1.struct stuff yourname;其成员变量的定义可以随声明进行:[cpp]view plain copy1.struct stuff Huqinwei = {"manager",30,185};也可以考虑结构体之间的赋值:[cpp]view plain copy1.struct stuff faker = Huqinwei;2.//或 struct stuff faker2;3.// faker2 = faker;4.打印,可见结构体的每一个成员变量一模一样如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)[cpp]view plain copy1.Huqinwei.job[0] = 'M';2.Huqinwei.job[1] = 'a';3.Huqinwei.age = 27;4.nbsp;Huqinwei.height = 185;结构体成员变量的访问除了可以借助符号".",还可以用"->"访问(下边会提)。

04-课件:结构指针

04-课件:结构指针

}
结构体指针
分析程序的运算结果: 结构数组 array 的初始化后的状态如下。
p
array[0]
100
array[1]
200
array[2]
300
array[3]
400
array[4] 500
10 data[0] 20 data[1] 30 data[2] 40 data[3] 50 data[4]
int data[5]={10,20,30,40,50,};/* data: 整型数组 */
Hale Waihona Puke struct s array[5]={100,&data[0],200,&data[1],
300,&data[2],400,&data[3],500,&data[4]
};
/* array: 结构数组 */
main ( )
pdate->year = 1963;
等价于:
today.year = 1963;
(* pdate).year = 1963; /* 必须加括号 */
结构体指针
例:分析程序的运算结果
struct s
{
int x, *y;/* y: 结构中的成员是指向整型的指针 */
} * p; /* p: 指向结构的指针 */
p指向下一个变量的成员 x
结构体指针
4、指针运算与++运算规律小结 由运算符的优先级和结合性决定++操作的对象; 由++的前缀/后缀形式,决定操作的时机。
++p->x ++ * p->y * ++ p->y *(++p)->y

精品-清华大学C语言课件 第13章01 结构体指针

精品-清华大学C语言课件 第13章01 结构体指针
struct Student* pStruct;/*定义结构体类型指针*/ pStruct=&student;/*指针指向结构体变量*/ printf("-----学生信息-----\n");/*消息提示*/ printf(“姓名: %s\n”,(*pStruct).cName);使用指针引用变量中的成员*/ printf("学号: %d\n",(*pStruct).iNumber); printf("性别: %s\n",(*pStruct).cSex); printf("年级: %d\n",(*pStruct).iGrade); return 0; }
【例13.2】 使用指向运算符引用结构体对象成员。 在本实例中,定义结构体变量但不为其进行初始化操作,使用指针指向结构体变量并为其成员进行赋值操作。
#include<stdio.h> #include<string.h>
struct Student/*学生结构*/ { char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ }student;/*定义变量*/
pStruct ->成员名;
这种方法使用的是指向运算符,例如使用指向运算符引用一个变量的成员:
pStruct->iNumber=12061212;
假如student为结构体变量,pStruct为指向结构体变量的指针,可以看出以下三种形式的效果是等价的:
student.成员名 (*pStruct).成员名 pStruct->成员名
Display(student.fScore[0]);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t = 29; else t = 28;} days = days + t; }
8
7.5.1 结构体变量作为函数参数
int fun(struct date d) {
int days = 0, i, t; for (i=1;i<d.month;i++) { switch (i)
{ case 1: …
3
7.4.2 指向结构体数组的指针
1. 定义 struct student a[3] , *p ;
p
2. 使用 赋初值为数组名
p++表示使指针指向 下一个结构体,而
for ( p=a ; p<a+3 ; p++ ) {
不是下一个成员 p'
gets( p->name ) ;
scanf( "%d%d%d ",&p->age,
输入日期
int days;
scanf("%d%d%d", &d.year, &d.month, &d.day); days = fun(d);
传递整个日期结 构体到函数
printf("day of year is :%d\n " ,
days);
}
10
7.5.2 结构体指针作为函数参数
2. 指向结构体变量(数组)的指针做实参,将结构体变量(数组)的
struct student {
char name[20] ; int age ; int s1 , s2 ; }; struct student stu, *p ; p = &stu ; gets( stu. name ); (*p). age = 21 ; p->s1 = 87 ; p->s2 = 90 ;
2
7.4.1 指向结构体变量的指针
2. 成员的引用格式 (1) 结构体变量名. 成员名
stu . age
(2) (*指针变量名) . 成员名 (*p) . age
(3) 指针变量名 -> 成员名
p->age
指向运算符
p -> age类型? 不是指针类型
分析:p->age++ 等价于(p->age)++ ++p->age 等价于++(p->age) 不等于(++p)->age
地址传给形参
struct student
stu
{ char name[20] ; int age ; int s1 , s2 ;
}; void main()
p
&p->s1,&p->s2);
}
p''
Mary 21 78 st[0] 86 Alex 20 90 st[1] 80
Mike 19 75 st[2] 68
4
7.4.2 指向结构体数组的指针
思考: 1. (++p)->age 先使p加1,然后的到p->age的值 2. (p++)->age 先得到p->age的值,然后使p加1 3. ++p->age 先使p->age,然后的到p->age的值 4. p->age++ 先得到p->age的值,然后使p->age加1
第9讲 结构体与指针、函数
本讲内容: (1)结构体类型的指针变量 (2)结构体与函数
1
7.4.1 指向结构体变量的指针
1. 定义 struct 结构体名 * 结构体变量名
struct student
p
stu
{ char name[20] ;
2010
Mary
int age ;
19
int s1 , s2 ;
78
} stu = {"Mary", 19, 78, 86};
86
struct student *p ;
结构体的地址为结构体
p = &stu ;
第一个成员的地址。
2010 2030 2034 2038
p = &; 是否可以? 不可以,类型不匹配。 改为: p = (struct student *)&;
name age s1 s2
name age s1 s2
stu
Alex 22 98 100
sss
Alex 2332 98 100
6
7.5.1 结构体变量作为函数参数
例1 输入任意日期,计算该天是本年中第几天。使用函数计算 天数。
分析: 1. 日期如何表示? 定义日期结构体。 2. 函数如何设计? 函数形参(输入): 日期结构体变量 函数返回值(输出): 天数
} days=days+t; } days=days+d.day; return days; }
计算前几个月的 天数之和
加上当月天数
9
7.5.1 结构体变量作为函数参数
struct date { int year;
int month; int day; };
定义日期结构体
void main() { struct date d;
5
7.5.1 结构体变量作为函数参数
1. 函数实参和形参都用结构体变量 , 参数之间为值传递 实参结构体变量各成员的值依次传 char name[20] ;
int age ; int s1 , s2 ; }; void main() { struct student stu={"Alex", 22, 98, 100}; aaa(stu); printf("%d", stu.age); } void aaa(struct student sss) { sss.age = 33; }
struct date { int year;
int month; int day; };
函数原形: int fun( struct date d)
7
7.5.1 结构体变量作为函数参数
3. 如何计算? 如 1999.2.12
31 + 12
如 1999.3.13 如 2000.3.13
31 + 28 + 13 31 + 29 + 13
天数 = 前几个月份天数之和 + 当月第几天
考虑闰年
如何计算前几个月天数之和?
for (i=1;i<d.month;i++) { switch (i)
{ case 1: case 3: case 5: case 7: case 8: case 10: case 12: t = 31; break;
case 4: case 6: case 9: case 11: t = 30;break; case 2: if (d.year%4==0 && d.year%100!=0 || d.year%400==0)
相关文档
最新文档