模块八 指针-2022-2023学年高一《C语言程序设计》同步教学

2022-09-30
| 54页
| 153人阅读
| 1人下载
普通

内容正文:

YCF 正版可修改PPT (中职)C语言程序设计模块八ppt电子课件 1 指针 模块8 LOGO 8.1指针的基本概念 在计算机中,所有数据都是存放在存储器中的。各数据类型占用不等的内存单元,如int型占2 B、long型占4 B等。在16位环境中,规定指针占2 B的内存单元,以此为基准,32位环境中为4 B,64位环境中为8 B。 指针理解如图8-1所示。 图8-1指针理解 8.1指针的基本概念 (1)内存单元:一般把1个字节(1 B)作为一个内存单元(8 bit)。数据以二进制码形式存储于内存单元中。 (2)指针及指针值:给每个内存单元编号(如1000),就可以快速准确地找到该内存单元。这个编号也称地址,这种地址就是指针。因此,指针值就是地址。 (3)指针变量:把指针保存于某个变量中,这个变量称为指针变量。 上图中,数组a有6个元素值,p为指针变量,保存有6个地址,这6个地址分别对应6个元素值的内存单元。通过这6个地址,就能快速地找到数组a的6个值。因而,p是指向数组a的指针。 一个指针是一个地址,是常量;而一个指针变量却可以被赋予不同的指针值,是变量。因此,严格地说,指针和指针变量并不是同一个概念。而在日常中,为了称呼方便,我们常把指针变量称为指针。读者对此应有清晰的认识。 8.2指针变量的定义和初始化 一般指针变量值初始化为单变量地址: int *p,a; p=&a; /*定义一个整型指针p,该指针指向整型变量a的地址*/ 写为一行就是: int a,*p=&a; 指针变量值初始化为单变量地址时,不要忘了“&”运算符。 再如: float m,*pf=&m; 8.2.1一般指针变量的定义与初始化 8.2指针变量的定义和初始化 8.2.2一维数组指针变量的定义与初始化 一维数组指针变量值初始化时,只需指向数组名即可,因为数组名即为该数组首元素首地址。 int a[10],*p; p=a; /*定义一个一维数组指针p,该指针指向一维数组a*/ 因为数组名代表首元素首地址,因此p=a等价于p=&a[0]。 写为一行就是: int a[10],*p=a; 再如: float b[5],*pf=b; 由此可见:数组名、指针及第1个元素首地址均指向同一个内存单元。 8.2指针变量的定义和初始化 8.2.3二维数组指针变量的定义与初始化 定义规则: 类型(*指针变量名)[长度] 长度指的是二维数组的列数。 int a[2][3],(*p)[3]; p=a;/*定义二维数组指针p,该指针指向二维数组a*/ 写为一行就是: int a[2][3],(*p)[3]=a; 要特别注意的是:不能忘记(),否则就变成了指针数组(后述)。 区分: int a[2][3],*p[3];/*这里p是指针数组名而不是数组指针*/ 8.2指针变量的定义和初始化 8.2.4字符串指针变量的定义与初始化 依上得知:字符串指针就是字符数组的首地址。 char *p,c[8]; p=c;/*定义字符串指针p,该指针指向字符数组c的首地址*/ 写成一行就是: char c[8],*p=c; 在定义字符串指针变量时,可以给该指针变量初始化字符串,但要明白的是:该指针变量不是“存放”字符串,而是指向字符串的首地址。 char *q,*p="How are you"; q="Nice to meet you"; 这里定义了两个字符串指针,p指向字符串"How are you"的首地址(元素H的地址),q指向字符串"Nice to meet you"的首地址(元素N的地址)。 8.2指针变量的定义和初始化 8.2.4字符串指针变量的定义与初始化 最后需要指出的是: (1)指针变量在使用前必须初始化,否则会影响程序的运行,甚至崩溃。 (2)指针变量的初始化只有三种情况: ①赋地址。 ②赋空值。例如,“int a,*p=NULL;”,赋空值表示不指向任何内存单元。 ③赋0,如“int a,*p=0;”。 (3)任何指针只能指向其同类,即指针变量的类型必须和其指向的变量类型一致。 8.2指针变量的定义和初始化 函数指针,顾名思义,就是指向函数的指针。 1.函数指针的定义 类型 (*函数指针变量名)(); 注意两个()都不能少。例如,“int (*p)();”定义一个函数指针p,该指针指向一个返回值为int型的函数;“float (*p1)(float);”定义一个函数指针p1,该指针指向一个具有float形参,返回值为float型的函数。 2.函数指针的初始化 假设有float型函数fm()和fn()。函数名是函数的入口地址,同数组名一样,是常量。函数指针的初始化就是指向函数名。同样,函数指针与其指向的函数必须是同一类型的。例如: float (*p1)(float),(*

资源预览图

模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
1
模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
2
模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
3
模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
4
模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
5
模块八 指针-2022-2023学年高一《C语言程序设计》同步教学
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。