第9章 指针
C语言实验-第七章-第九章2
实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。
如键入any boy并回车,则2。
补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。
《C语言程序设计教程(第二版)》 第09章-指针(1)
访问p_int所 指向的变量
getch();
}
程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p
2019/2/22
11
1、指针变量的定义
指针变量的定义标识符
数据类型 *指针变量[,*指针变量2……];
例如, [案例9.1]中的语句:
int num_int=12, *p_int ;
特别说明:定义而未初始化的指针变量(例如 p_int)是悬空的。
使用悬空指针变量,很容易破坏系统,导致系统 瘫痪。
2019/2/22
12
2、取地址运算 : &变量名 例 如 , [ 案 例 9.1] 中 的 &num_int 、 &num_f 、 &num_ch 的结果,分别为对应变量的地址 (num_int 、 num_f、num_ch)。 注意:指针变量只能存放相同数据类型变量的 地址。 例如, [案例9.1]中的指针变量p_int、p_f、p_ch, 只能接收int型、float型、char型变量的地址,否则出 错。
使p_int指向变量num_int
2019/2/22
10
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch);
9.3* 1维数组的指针与列指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 指针数组与主函数main()的参数 9.6 返回指针值的函数
计算机二级c语言第九章 数组和指针习题与答案
第九章数组和指针1、有以下程序main(){ int a[]={2,4,6,8,10}, y=0, x, *p;p=&a[1];for(x= 1; x< 3; x++) y += p[x];printf("%d\n",y);}程序运行后的输出结果是A)10 B)11 C)14 D)152、有以下程序void sum(int a[]){ a[0] = a[-1]+a[1]; }main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf("%d\n", a[2]);}程序运行后的输出结果是A)6 B)7 C)5 D)83、有以下程序main(){int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++< 7) if(p[i]%2) j+=p[i];printf("%d\n",j);}程序运行后的输出结果是A)42 B)45 C)56 D)604、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是A)for(i=0;i<6;i++) printf("%2d",*(p++));B)for(i=0;i<6;i++) printf("%2d",*(p+i));C)for(i=0;i<6;i++) printf("%2d",*p++);D)for(i=0;i<6;i++) printf("%2d",(*p)++);5、有以下程序#include < stdio.h >main(){ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5);printf("%d %d\n",*p,*q); }程序运行后的输出结果是A)运行后报错 B)6 6 C)6 11 D)5 106、有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A)5 B)6 C)8 D)97、已有定义:int i,a[10],*p;则合法的赋值语句是A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;8、以下能正确定义一维数组的选项是A)int num []; B)#define N 100int num [N];C)int num[0..100]; D)int N=100;int num[N];9、有以下程序main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i< 7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}执行后输出结果是A)58 B)56 C)45 D)2410、有以下程序main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3;printf("%d\n",s[2]);}执行后输出结果是A)随机值 B)0 C)5 D)611、若有定义:int aa[8];。
《计算机操作系统》课件第9章 (2)
第9章 文件管理
记录式文件是指文件由若干记录组成,每个记录可赋予 一个标识,称为键,记录式文件又可分为可变长记录文件和 定长记录文件。
描述文件的逻辑结构时要包括对文件的存取方法的定义。 用户对不同逻辑结构的文件采用不同的存取方法,以便对文 件进行各种操作。常用的存取方法有顺序存取、随机存取和 按键存取三种方法。
(2) 把一个文件划分成几个能独立存取的顺序子文件, 这样,各个顺序子文件只需占用相对较少的连续磁盘块,容 易得到满足。由于各顺序子程序是可独立存取的,所以,经 这样划分后的文件结构,本质上仍是顺序文件。
第9章 文件管理
2. 链接结构 把逻辑文件中的各个逻辑记录任意存放到一些磁盘块中, 这些磁盘块可以分散在磁盘的任意位置。例如,有5个逻辑 记录的某文件,存放到磁盘上需占用5个磁盘块,这五个磁 盘块的块号可以是9,16,1,10,25。于是,顺序的逻辑记 录被存放在非顺序的磁盘块上。如果用指针把这些磁盘块按 逻辑记录的顺序链接起来,则形成了文件的链接结构,把链 接结构的文件称为“链接文件”或“串联文件”。
第9章 文件管理
9.1 文件和文件系统 9.2 文件结构 9.3 文件存储空间的管理 9.4 文件目录管理 9.5 文件的共享和保护 9.6 文件操作和使用 9.7 文件管理实现举例 习题
第9章 文件管理
9.1 文件和文件系统
9.1.1 文件
文件是在逻辑上具有完整意义的信息的集合,它以是实现非连续存储的另一种方法,索引结构为 每个文件建立一张“索引表”,在索引表中记载每个逻辑记 录的存放位置的指针。通常,把索引表保存在某个磁盘块中, 文件目录中指出索引表的存放位置。采用索引结构的文件称 为“索引文件”。 索引表中的每个表项指出一个逻辑记录的存放位置,可 以按逻辑记录的顺序登记在索引表中。这样,第i个表项就表 示了第i个逻辑记录所在的位置。当索引表中的表项数大于逻 辑记录个数时,可用特殊字符(比如“-1”)表示无效登记项。
计算机操作系统课后答案第9章习题解答
第9章习题解答一、填空1.MS-DOS操作系统由BOOT、IO.SYS、MSDOS.SYS以及 所组成。
2.MS-DOS的一个进程,由程序(包括代码、数据和堆栈)、程序段前缀以及环境块三部分组成。
3.MS-DOS向用户提供了两种控制作业运行的方式,一种是批处理方式,一种是命令处理方式。
4.MS-DOS存储管理规定,从地址0开始每16个字节为一个“节”,它是进行存储分配的单位。
5.MS-DOS在每个内存分区的前面都开辟一个16个字节的区域,在它里面存放该分区的尺寸和使用信息。
这个区域被称为是一个内存分区所对应的内存控制块。
6.MS-DOS有4个存储区域,它们是:常规内存区、上位内存区、高端内存区和扩充内存区。
7.“簇”是MS-DOS进行磁盘存储空间分配的单位,它所含扇区数必须是2的整数次方。
8.当一个目录表里仅包含“.”和“..”时,意味该目录表为空。
9.在MS-DOS里,用文件名打开文件,随后就通过句柄来访问该文件了。
10.在MS-DOS里,把字符设备视为设备文件。
二、选择1.下面对DOS的说法中,B 是正确的。
A.内、外部命令都常驻内存B.内部命令常驻内存,外部命令非常驻内存C.内、外部命令都非常驻内存D.内部命令非常驻内存,外部命令常驻内存2.DOS进程的程序,在内存里 D 存放在一起。
A.总是和程序段前缀以及环境块B.和谁都不C.总是和进程的环境块D.总是和程序段前缀3.MS-DOS启动时能够自动执行的批处理文件名是: C 。
A.CONFIG.SYS B.MSDOS.SYSC.AUTOEXEC.BAT D.4.下面所列的内存分配算法, D 不是MS-DOS采用的。
A.最佳适应法B.最先适应法C.最后适应法D.最坏适应法5.在MS-DOS里,从1024K到1088K的存储区域被称为 D 区。
A.上位内存B.扩展内存C.扩充内存D.高端内存6.MS-DOS的存储管理是对A的管理。
A.常规内存B.常规内存和上位内存C.常规内存和扩展内存D.常规内存和扩充内存7.在下面给出的MS-DOS常用扩展名中,B 不表示一个可执行文件。
第9章 指针
第9章指针指针是C语言的精华,指针让C语言威力无穷,魅力四射。
为什么scanf函数的实参有时要加一个&操作符,有时却不加?为什么数组作为参数时就可以改变实参的值?这些前面遗留的问题都与指针有关,这些问题的答案均可在本章中找到。
指针是C语言中特殊的数据类型。
整型变量所标识的存储单元中存放整数,浮点型变量中存放浮点数,那么指针变量所标识的存储单元中存放的显然是指针,但是指针是什么呢?9.1 指针类型9.1.1 变量的左值和右值变量用于标识存储单元。
计算机中的内存以字节为单位编号。
编号多为32位的二进制数,从0号开始,即0x0000 0000、0x0000 0001、……、0xffff ffff。
计算机中只用内存编号(又称内存地址)标识内存单元。
如果定义并初始化了一个整型变量如int i = 5;,则计算机中的内存状态可能如图9-1所示。
图9-1 变量i的内存状态图从图9-1可知,整型变量i所标识的存储单元共4个字节,通常以存储单元的首字节地址作为该存储单元的地址,即整型变量i所标识的存储单元的地址为0x0012 ff00,类型为整型。
当取变量i的值时,计算机会把从0x0012 ff00处开始的4个字节作为一个整体,取出其中的内容,然后按整型解码最终得到变量i的值为5。
存储单元如宿舍,其地址像宿舍号(如408),其存储的内容如住宿者(如王五),相关变量名如宿舍的雅称(如liaozhai)。
由以上分析可知,变量既标识存储单元的地址又标识其存储的内容,因此变量比如整型变量i也有两个值。
整型变量i的一个值是地址0x0012 ff00,另一个值是内容5。
变量i在使用时表现为何值呢?例9-1分析语句i = 5; j = i;中整型变量i的值。
分析:语句i = 5;的操作结果是把5放入变量i所标识的存储单元中,也就是把5的补码存入地址为0x0012 ff00的存储单元中,变量i的值此时实为地址0x0012 ff00。
C语言程序设计-杨路明第9章课件
9.3.3 结构体数组的使用
(3) 不能把结构体数组元素作为一个整体直接进行输入或输出,只能以单个成 员对象进行输入输出。例如:
/*学号*/
char name[20]; /*姓名*/
char sex;
/*性别*/
int age;
/*年龄*/
float score;
/*C成绩*/
char addr[40];
};
注:‘;’不能省
结构体类型定义描述结构 的组织形式,不分配内存
9.1 结构体类型的定义
例如,考虑10门课程成绩, 加上总成绩与平均成绩,可作如下定义:
struct是关键字,不能省略
struct
[结构体类型名] {
成员说明列表: ……….
}
成员类型可以是 基本型或构造型
9.1 结构体类型的定义
实例:定义结构体类型,描述下列数据 (1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、C语言课程成绩,地址:
struct student
{ int num;
输出stud变量,应该使用如下方式:
应该如何输出stud变量?
printf(″%s,%s,%ld\n″,,stud.addr,stud.num); 输入stud变量的各成员值,则用:
scanf(″%s%s%ld″,,stud.addr,&stud.num);
9.3 结构体类型数组
9.4.2 指向结构体数组元素的指针
第九章习题及答案
第九章习题一、选择题1.以下选项中不能正确把cl定义成结构体变量的是( )A)typedef struct B)struct color cl{ int red; { int red;int green; int green;int blue; int blue;} COLOR; COLOR cl; };C)struct color D)struct{ int red; { int red;int green; int green;int blue; int blue;} cl; } cl;2.有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是( )A) (p++)->num B)p->num C)(*p).num D)stu[3].age3.有以下结构体说明、变量定义和赋值语句struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是( )。
A)scanf(“%s”,s[0].name);B)scanf(“%d”,&s[0].age);C)scanf(“%c”,&(ps->sex)); D)scanf(“%d”,ps->age);4.以下叙述中错误的是()A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名5.有以下程序段()typedef struct node { int data; struct node *next; } *NODE;NODE p;以下叙述正确的是(C)A)p是指向struct node结构变量的指针的指针B)NODE p;语句出错C)p是指向struct node结构变量的指针D)p是struct node结构变量6.若有以下定义和语句union data{ int i; char c; float f;}x;int y;则以下语句正确的是( )。
VB教程(第2版) 第9章 鼠标、键盘和OLE
9.1.1 鼠标事件
当在图片框中移动鼠标时,不断地画线和画方块,实现连续画线和方块。 Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '在图片框中移动鼠标 If Button = 1 And C2 = 1 Then Select Case C1 Case 1 Picture1.Line -(X, Y) Case 2 Picture1.Line (X1, Y1)-(X, Y), , BF End Select End If End Sub
9.1.1 鼠标事件
说明: (1)Button表示是哪个鼠标键被按下或释放。用0、1、2三个位表示鼠标 的左、右、中键,每位用0、1表示被按下或释放,三个位的二进制转换成十进 制就是Button的值,如图9.1所示,表9.1列出了按钮与常数值的对应关系。
十进制 0 1 2 3 4 5 6 7
二进制 000 001 010 011 100 101 110 111
图9.4 查看键代码
9.2 键盘事件
2. KeyPress事件 KeyPress事件是当键盘有键按下时触发的。KeyPress事件检测的键有Enter、 Tab、BackSpace以及键盘上的字母、数字和标点符号键,对于其他功能键、编 辑键和定位键,则不作响应。 语法: Private Sub 对象_KeyPress(KeyAscii As Integer) 说明: • 对象:是接受键盘事件的对象,由具有焦点的对象接收。 • KeyAscii:是按键对应的ASCⅡ码值。将keyAscii改为0时可取消本次击键, 这样对象便接收不到按键的字符。
第9章 指针
第九章指针指针是C语言的一个重要概念,也是C的一个重要特色。
正因为有了指针,C语言才可以灵活有效的表示复杂的数据结构,更方便地处理诸如内存、字符串、数组、函数等。
可以说,不掌握指针就不能掌握C的精华。
一、地址和指针的概念地址的概述1、存储器地址计算机所处理的数据,总是要存储在一定的存储介质上,例如内存。
而这些数据的存储,又是有一定先后顺序的。
因此我们通常将这些存储介质上的一个个用于存放数据的基本单元进行线性编址,即按照一定的顺序给每个存储单元(字节)一个编号,这个编号就是该单元的地址。
一般情况下,地址总是从0开始的一系列整数。
某个地址就代表某个存储单元,就如一个房间号Array码对应于一个实际的房间一样。
2、存储单元的内容这是不同于地址的另一概念,它是指某地址单元内具体存放的数据,如一个字符、一个整数、实数或一个字符串。
例:如右图100,101,102,…,205,206等即是地址;160单元的内容就是字符C,161单元的内容就是字符H,…,等。
3、变量的访问一般情况下,程序中的一个变量就对应存储器的若干个单元,对变量的访问可以简单地认为是通过变量名来对内存单元进行存取操作。
实际上,程序在编译之后,变量名已经转化为了与该变量对应的存储单元地址,因而对变量的访问就是通过地址对存储单元的访问。
1)直接访问按照变量地址来对变量进行存取的方式,称为直接访问方式。
例如:右表中对变量a的读取:printf(“%d”,a),其实是先找到a的地址160,然后从160开始读取一个字节的字符‘C’;同理用scanf(“%d”,&b)输入b的值时,在执行时,直接把从键盘输入的数据‘H’送入从地址为161开始的字节单元中。
2)间接访问通过另一变量间接获取某变量的地址,从而间接实现对原变量的访问的方式,称为间接访问方式。
例如:将变量a的地址160存放在另一个变量当中,见上表p=160,那么,对变量a的访问也可以为:先通过变量p的地址205找到该单元的数据160,再将160视为地址,该地址单元内容就是变量a的值(字符‘C’)。
第9章 实验14 用多用电表测量电学中的物理量
第九章 恒定电流
高考一轮总复习 • 物理
返回导航
(3)如图所示为用多用电表测量电压表内阻的电路图,其中a是_黑__表 笔(选填“红”或“黑”)。
第九章 恒定电流
高考一轮总复习 • 物理
返回导航
[解析](1)指针偏转幅度过小,说明待测电阻的阻值相对所选挡位偏 大,为了使指针能够尽可能指在表盘中央附近以减小误差,应将挡位换 为更大的“×1 k”挡。
第九章 恒定电流
高考一轮总复习 • 物理
返回导航
考点二 多用电表的原理
例2 (2023·湖南模拟预测)某同学用普通的干电池(电动势E=1.5 V,内阻r=0.6 Ω)、直流电流表(量程Ig=1 mA、内阻Rg=130 Ω)、定值 电阻R1=1 040 Ω和电阻箱R2、R3等组装成一个简单的欧姆表,电路如图 所 示 , 通 过 控 制 开 关 S 和 调 节 电 阻 箱 , 可 使 欧 姆 表 具 有 “×10” 和 “×100”两种倍率。
第九章 恒定电流
高考一轮总复习 • 物理
返回导航
五、误差分析 1.系统误差: (1)电池用旧后,电动势会减小,致使电阻测量值偏大,要及时更换 新电池。 (2)测电流、电压时,由于电表内阻的影响,测得的电流、电压值均 小于真实值。 2.偶然误差: (1)欧姆表的表盘刻度不均匀,估读时易带来误差,要注意其左密右 疏特点。 (2)读数时的观测易形成偶然误差,要垂直表盘正对指针读数。
C.将选择开关旋转到合适的电流挡,闭合开关,利用图3 的电路 测量通过小灯泡的电流
第九章 恒定电流
高考一轮总复习 • 物理
返回导航
[解析](1)欧姆表读数为700 Ω;如果用“直流5 V”挡测量,读数为 3.40 V;
新人教版三年级上册《第9章_数学广角》小学数学-有答案-单元检测训练卷(浙江省)
新人教版三年级上册《第9章数学广角》单元检测训练卷(浙江省)一、填空(12分)1. 指针停在________奖的可能性最小,停在________奖的可能性最大。
2. 书架上放着科技书、故事书、连环画各一本,从中选两本借回家,有________种不同的借法。
3. 三人参加独唱比赛,每人唱一首歌,主持人为他们安排节目顺序,其中小明可能排在第________或排在第________,也有可能排在第________.4. 能组成________个不同的两位数。
5. 能组成________个不同的三位数。
6. 能组成________个不同的三位数。
7. 抛出一枚硬币,有________种结果,分别是________.8. 小明的口算正确率是98%,再让他做一道口算,很可能做________.二、选择(6分)从l、2、3、4这4个数字中选出两个数组成两位数,有()种情况。
A.10B.12C.8甲、乙、丙、丁4个好朋友排成一队拍照,他们一共有()种不同的站法。
A.10B.20C.24快餐店主食有米饭、馒头,荤菜有鱼、红烧肉,素菜有炒青菜、四季豆,快餐价格4元,只能荤菜和素菜各选一种,顾客一共有()种选菜的方法。
A.4B.6C.8三、有几种搭配方法(10分)每次选两种蔬菜,有几种选法?我的思考方法:________.甲、乙、丙、丁四人到宾馆住宿,每2人一个房间,有几种住法?请你排一排:________.四、(15分)画一画:摸出的一定是○画一画:摸出的不可能是△画一画:摸出的可能是□画一画:摸出的是●的可能性极小。
将盒子里的球涂上颜色,使从中任意摸出一个球,摸到白球的可能性最大。
五、数一数,连一连(8分)(1)有________个角(2)有________个长方形(3)有________个正方形。
一个圆上有4个点,以任意两个点为端点,一共可以连接多少条线段?六、算一算(12分)有四个硬币每次取2个硬币,取出的钱共有几种情况,写一写。
c语言第9章_指针及其应用(1)课后复习重点[1]教程
指针变量在使用前
必须赋值!
swap(pointer_1,pointer_2);
printf("a=%d,b=%d\n", *pointer_1,*pointer_2); return 0; } 2018/11/2
运行结果:
a:10 *pa:10
...
printf("&pa:%x(hex)\n",&pa);
return 0; }
&a:f86(hex)
pa:f86(hex) &pa:f8a(hex)
16
2018/11/2
例:输入两个数,并使其从大到小输出
int main()
{
int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b);
24
例:交换两个数—形参和实参都为指针变量
void swap(int *p1, int *p2) { int *p; int x,*p=&x; *p=*p1; *p1=*p2; *p2=*p; } int main() { int a=7,b=11; int *pointer_1=&a,*pointer_2=&b;
2018/11/2
9
例: void main( ) { int i=10; 危险! int *p; *p=i; printf("%d",*p); } 例: void main( ) { int i=10,k; int *p; p=&k; *p=i; printf("%d",*p); } 2018/11/2
光纤通信课后习题解答-第9章参考答案
光纤通信课后习题解答-第9章参考答案思考题参考答案1、SDH帧由哪⼏部分组成?SDH有哪些显著特点?答:SDH帧由净负荷,管理单元指针和段开销三部分组成。
SDH主要优点有:⾼度标准化的光接⼝规范、较好的兼容性、灵活的分插功能、强⼤的⽹络管理能⼒和强⼤的⾃愈功能。
其缺点有:频带利⽤率不如PDH⾼、设备复杂性增加、⽹管系统的安全性能要求⾼。
2、根据帧结构,计算STM-1、STM-4的标称速率。
解:STM-1的标称速率:⼀帧的⽐特数:9×270×8=19440(⽐特),传送⼀帧所⽤时间为125µs,故标称速率为:19440/(125×10-6)=155520(kb/s)。
STM-4的标称速率:STM-4帧为9⾏,270×4列,传送⼀帧所⽤时间为125µs。
可以看出STM-4的列数是STM-1的4倍,其余都⼀样,所以:STM -4的标称速率为:155520×4=622080(kb/s)3、STM-N帧长、帧频、周期各为多少?帧中每个字节提供的通道速率是多少?答:STM-N帧长为9×270N×8⽐特,帧频8000帧/秒,周期为125µs。
帧中每个字节提供的通道速率为:8⽐特/帧×8000帧/秒=64kb/s。
4、段开销分⼏部分?每部分在帧中的位置如何?作⽤是什么?答:段开销分为再⽣段开销和复⽤段开销两部分。
再⽣段开销位于STM-N帧中的1~3⾏的1~9×N列,⽤于帧定位,再⽣段的监控、维护和管理。
复⽤段开销分布在STM-N帧中的5~9⾏的1~9×N列,⽤于复⽤段的监控、维护和管理。
5、管理单元指针位于帧中什么位置?其作⽤是什么?答:管理单元指针存放在帧的第4⾏的1~9×N列,⽤来指⽰信息净负荷的第⼀个字节在STN-N帧内的准确位置,以便正确地分出所需的信息。
6、简述2.048Mbit/s信号到STM-1的映射复⽤过程。
c语言 第9章_指针及其应用(1)课后复习重点[1]
指针变量必须先赋值,再使用
...
2000
10
整型变量i
2004
2008
变量k
10
指针变量p 随机 2004
2012
...
10
int i; float *p; p=&i;
一个指针变量不能指向 与其类型不同的变量!
应在类型相同的指 针变量之间赋值 int *p; float *q; p=q;
int *p; p=100;
23
例:交换两个数—形参和实参都为指针变量
void swap(int *p1, int *p2) { int *p; p=p1; p1=p2; p2=p; } int main() { int a=7,b=11; int *pointer_1=&a,*pointer_2=&b;
printf("a=%d,b=%d\n",a,b); printf("swapped:\n"); 调用结束 调用前 调用中
用于存放某个内存单元地址的变量。
(指向某内存单元的指针)
例如: char c = 'K'; char *p ;
p = &c;
p(4000) 2000 c(2000)
*p
75
2015/12/30
6
指针变量的声明
指针变量的声明格式: 数据类型 *变量名; – "*": 声明一个指针类型的变量; – "数据类型":指针变量所指向的变量的数据类型。
2015/12/30
9
例: void main( ) { int i=10; 危险! int *p; *p=i; printf("%d",*p); } 例: void main( ) { int i=10,k; int *p; p=&k; *p=i; printf("%d",*p); } 2015/12/30
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int change(int a ) { a = 2; return a; }
指针变量作函数参数
【例1.b 】用指针编写程序修改一个变量的值。
#include <stdio.h> int main() { int a = 1; int * pa = &a; /* pa指向a*/ printf("initial a = %d,",a); *pa = 2; /* 即a=2 */ printf("now a = %d\n",a); return 0; }
11/51
指针变量作函数参数
【例1.a 】编写函数修改一个变量的值。
#include <stdio.h> int change(int a ); int main() { int a = 1; printf("initial a = %d,",a); a = change(a);/*调用函数change(),返回改变后的值*/ printf("now a = %d\n",a); return 0; }
#include <stdio.h> void change(int * p1,int * p2 ); int main() { int a = 1, b = 2; int * p1 = &a, * p2 = &b; printf("initial a = %d,b = %d,",a, b); change(p1,p2); printf("now a = %d,b = %d\n",a, b); return 0; } void change(int * p1, int * p2 ) { *p1 = 2; *p2 = 3; }
27/51
指针变量作函数参数
【练习】编函数实现三个数的降序输出。
#include <stdio.h> void exchange(int * , int * , int * ); void swap(int * , int * ); int main() { int a,b,c,*p1,*p2,*p3; printf("please enter three numbers:"); scanf("%d %d %d",&a,&b,&c); p1=&a; /*p1指向a*/ p2=&b; /*p2指向b*/ p3=&c; /*p3指向c*/ exchange(p1,p2,p3); /*调用函数exchange(),将p1,p2,p3指向的 变量进行降序排列*/ printf("The order is:%d,%d,%d\n",a,b,c); return 0; }
9/51
指针变量的定义和初始化
指针变量的初始化 未初始化的指针变量为随机值 野指针(悬挂指针) 可能会造成数据的误操作,引发严重后果 未确定初始值的指针变量的初始化 将其初始化为NULL
NULL表示空,零值(定义于stdio.h)
10/51
指针变量的使用
指针的使用原则 永远清楚每个指针指向了哪里,指针必须 指向一块有意义的内存 永远清楚每个指针指向的对象的内容是什 么 永远不要使用未经初始化的指针变量
指
指针的引出 内存中的地址按字 节编号,每个字节的 存储单元均对应一个 地址 char a = „A‟; int b = 0,c = 0; 指针就是地址!
4/51
针
地址
00236FF6F 00236FF70 00236FF71 00236FF72 00236FF73 00236FF74 00236FF75 00236FF76
24/51
指针变量作函数参数
/*函数功能:计算数组元素之和与平均值*/ int Sum(int a[],int n) { int i , sum = 0; for(i=0; i<n; i++) { sum += a[i]; } return sum; }
25/51
指针变量作函数参数
【例3.c】 编函数实现求n个整数的和与平均值。
指针变量作函数参数
【例2】编写函数实现两个数的交换。
#include <stdio.h> int main() { int a,b; a = 1; b = 2; printf(“initial a = %d,b = %d”,a,b); swap(a,b); printf(“now a = %d,b = %d”,a,b); return 0; }
/*函数功能:修改p所指向的变量的值*/
void change(int *p ) { *p = 2; }
指针变量作函数参数
传地址调用 将变量的地址传递给函数的形参 形参和实参指向了同一个内存地址,对 形参的操作同时影响了实参的值
&a
实参
a
pa
16/51
形参
指针变量作函数参数
【练习】编函数修改两个变量的值。
23/51
指针变量作函数参数
【例3.b】 编函数实现求n个整数的和与平均值。
#include<stdio.h> #define N 20 void ReadData(int a[], int ); int Sum(int a[], int ); int main(void) { int a[N], n, sum; float aver; printf("Input n:"); scanf("%d", &n); printf("Input %d numbers:", n); ReadData(a,n); sum = Sum(a, n); aver = (float)sum/n; printf("sum = %d and average = %.2f\n",sum,aver ); return 0; }
#include<stdio.h> #define N 20 void ReadData(int a[], int ); void Sum_Aver(int a[], int *, float *, int ); int main(void) { int a[N], sum, n; float aver; printf("Input n:"); scanf("%d", &n); printf("Input %d numbers:", n); ReadData(a,n); Sum_Aver(a, &sum, &aver , n); printf("sum = %d and average = %.2f\n",sum,aver ); return 0; }
19/51
void swap(int *a,int *b) { int temp;
指针变量作函数参数
要使某个(些)变量的值通过函数调用发生改变,或 者说让函数返回多个值:
(1) 在主调函数中,把该变量的地址作为实参
(2) 在被调函数中,用形参(指针)接受地址
(3) 在被调函数中,改变形参(指针)所指向变量 的值,即在被调函数中采用间接访问方式来改变所 指向变量的值(即主调函数中变量的值)2/51指针变量作函数参数
/*函数功能:将数组写入数据*/ void ReadData(int a[], int n ) { int i; for(i=0; i<n; i++) { scanf("%d", &a[i]); } }
指针变量作函数参数
/*函数功能:计算数组元素之和与平均值*/ void Sum_Aver(int a[],int n) { int i, sum = 0; float aver; for(i=0; i<n; i++) { sum += a[i]; } aver = (float) sum / n; printf("sum = %d and average = %.2f\n",sum,aver ); }
欲速则不达,见小利则大事不成
C语言程序设计
主讲教师:陈哲云
学习指针的重要性
指针是C语言的灵魂。 •提高程序效率(高效传递数组和结构) •实现内存的动态分配
•直接访问硬件
•在函数数据传递中,通过传址改变实参
•处理复杂的数据结构
指针
引例: 1.编函数实现修改一个数的值。 2.编函数实现两个数的交换。 3.编函数实现求n个整数的和与平均值。
指针变量作函数参数
【例3.a】 编函数实现求n个整数的和与平均值。
#include<stdio.h> #define N 20 void ReadData(int a[], int ); void Sum_Aver(int a[], int ); int main(void) { int a[N], n; printf("Input n:"); scanf("%d", &n); printf("Input %d numbers:", n); ReadData(a,n); Sum_Aver(a, n); return 0; }
变量值 …
A 0 0 0 0 0 0 0 0
变量名
a b
c
…
指针变量
指针变量的定义 指针变量 是一种特殊类型的变量 只能存放变量的地址 指针变量的定义方法 类型关键字 * 指针变量名; /*定义一个指向整型变量的指针*/ int * pa;