(演示)计算机程序设计基础(c语言)-第7章+指针

上传人:j7****6 文档编号:61692733 上传时间:2018-12-10 格式:PPT 页数:33 大小:259KB
返回 下载 相关 举报
(演示)计算机程序设计基础(c语言)-第7章+指针_第1页
第1页 / 共33页
(演示)计算机程序设计基础(c语言)-第7章+指针_第2页
第2页 / 共33页
(演示)计算机程序设计基础(c语言)-第7章+指针_第3页
第3页 / 共33页
(演示)计算机程序设计基础(c语言)-第7章+指针_第4页
第4页 / 共33页
(演示)计算机程序设计基础(c语言)-第7章+指针_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《(演示)计算机程序设计基础(c语言)-第7章+指针》由会员分享,可在线阅读,更多相关《(演示)计算机程序设计基础(c语言)-第7章+指针(33页珍藏版)》请在金锄头文库上搜索。

1、1,第7章 指针,2,内容提要,指针的概念; 用指针做函数参数; 字符数组和字符指针 指向数组的指针与指针数组 动态内存分配函数及其应用;,3,存储器,存储器是计算机存储数据和程序的记忆单元集合 每个记忆单元由8位二进制位组成。cpu可读写其中的数据。 分外存和内存.,内存示意图,地址0F01,数据,存储容量单位:,回顾,4,内存中的每个字节都有唯一的一个地址 地址按字节编号,按类型分配空间 内存可以随机访问,只要指明要访问的内存单元的地址,就可以立即访问到该单元,内存,回顾,5,寻址方式,程序中如何读写内存中的数据? 通过变量的地址访问变量所在的存储单元(寻址) 两种寻址方式 直接寻址 通过

2、变量名直接存取变量内容的访问方式. 间接寻址 通过指针变量来间接存取它所指向的变量的访问方式,6,为什么引入指针的概念,指针 为函数提供修改变量值的手段 为C的动态内存分配系统提供支持 为动态数据结构(如例链表、队列、二叉树等)提供支持 可以改善某些子程序的效率,7,指针的概念,指针:另一个变量的首地址 变量的指针就是变量的地址. 指针变量:一种特殊的变量,存放地址的变量,用于间接访问其他变量,8,指针变量的定义,一般形式 类型关键字 *标识符 int *p; 定义了一个指针变量p,简称指针p p是变量,int*是类型 指针变量初始化 p = *p就像普通的变量一样使用,其值是p指向的内存的内

3、容 p可以动态(任意)地指向不同内存,从而使*p代表不同的变量,9,指针变量的定义,例 :int i,*i_pointer=,这个变量定义的语句都包含了那些内容? 变量有两个,整型变量i和i_pointer “*”:指针类型说明符,在变量定义时出现在变量名前面的 表示该i_pointer变量为指针变量 该指针变量i_pointer是指向整型变量的指针 &:取地址运算符, &i运算后得到变量i的内存的(首)地址 =:赋值运算符,赋值的结果是, 对指针变量i_pointer进行了初始化. 对指针变量i_pointer初始化的结果是,指针变量i_pointer指向变量i,10,指针变量的引用,i=3

4、; 可以对i赋值,是直接寻址 *i_pointer=3; 可以对i赋值,是间接寻址 *:指针运算符 *i_pointer:代表指针变量i_pointer所指向的变量,11,指针变量与其它类型变量的对比,共性 在内存中占据一定大小的存储单元 先定义,后使用 特殊性 它的内容只能是地址,而不能是数据 必须初始化后才能使用,否则指向不确定的存储单元,对该空间进行访问,将可能造成危险 可参与的运算:加、减一个整数,自增、自减、关系、赋值 只能指向同一基类型的变量,12,指针变量的应用,main() int a,b; int *pointer_1,*pointer_2; a=100;b=10; poin

5、ter_1= ,13,指针变量的应用 对输入的两个数按大小顺序输出,main() int *p1,*p2,*p,a,b; scanf(“%d%d“, ,14,指针变量作为函数参数,函数的参数可以是指针变量,作用是将一个变量的地址传送到另一个函数中,指针变量做函数参数的经典例子: 两数的互换,15,编写函数实现两数的互换,void Swap(int x,int y) int temp; temp = x; x = y; y = temp; main() int a, b; a = 15; b = 8; Swap(a, b); printf(“a=%d,b=%d“,a,b); ,运行结果?,16,

6、编写函数实现两数的互换(使用指针),void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp; main() int a, b;*p1,*p2 a = 15; b = 8; p1= ,运行结果?,17,编写函数实现两数的互换(使用指针),void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp; main() int a, b; a = 15; b = 8; Swap( ,运行结果?,18,数组、指针、指针变量,数组名代表数组的首地址,也就是一个指针,

7、只是不能修改 指针也可当作数组名使用,数组元素的指针是数组元素的地址 例: int a4,*pa; pa=,19,指针算术运算,int *p, a10; p = a; p+; /*p的值增加多少?*/ 指针的加减运算是以其指向的类型的字节长度为单位的,6000 6001 6002 6003 6004 6005 6006,20,指针与一维数组的关系的示例 教材264页,设一个a数组,整型,有10个元素。用三种方法输出各元素: 1.使用数组下标 2.使用数组名 3.使用指针变量,21,指针与数组的关系示例,使用数组下标 main() int a10; int i; for(i=0; i10; i+

8、) scanf(“%d“, ,22,使用数组名 main() int a10; int i; for(i=0; i10; i+) scanf(“%d“, ,指针与数组的关系示例,23,使用指针变量 main() int a10,*p; p=a; int i; for(i=0; i10; i+) scanf(“%d“,p+i); printf(“n“); for(i=0; i10; i+) printf(“%d“,*(p+i); ,指针与数组的关系示例,24,指针与数组的关系示例,使用指针变量 main() int a10, *p; for (p=a; p(a+10); p+) scanf(“%

9、d“, p); for (p=a; p(a+10); p+) printf(“%d “, *p); ,去掉p=a可以吗? 为什么?,25,小结:数组元素的几种等价引用形式,数组元素的几种等价引用形式 1.下标法: ai, a3 2.指针法:通过指向数组元素的指针找到数组元素 *(a+i), *(a+3), pi,*(p+i) 说明: 如果指针变量p已经指向数组中的元素,则p+1指向同一数组中的下一个元素。(而不是将p的值简单的加1) 如果p的初值为&a0,则 p+i和a+i就是ai 的地址 *p 就是a0,*(p+5)=*(a+5)就是a5,.,*(p+i)就是ai。 ai, *(p+i),

10、*(a+i), pi都是等效的。 不能写 a+,因为a是数组首地址是常量。,26,例7.3:从键盘输入一个班学生一门课的成绩,试用函数编程在找出最高分及其学号,教材253页 见 程序示例,27,字符串与字符数组、字符指针 教材258页,C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符串 一串以0结尾的字符 字符数组 每个元素都是字符类型的数组 char string100; 字符指针 指向字符类型的指针 char *p; 数组和指针可以等同看待,上面三者本质上相同,28,字符指针变量与字符数组的区别,定义方法不同 char str10; char *ptr; 赋

11、值方法不同 数组: char str10= ”china”; strcpy(str,”china”); 指针 char *ptr; ptr = ”china”;,字符指针是变量,而数组名是地址常量。,29,使用字符指针的注意事项,字符指针变量必须有明确的指向,否则使用是危险的 例如,输入字符串时 char *a; scanf(“%s“, a); /*错误*/ 应为: char *a; char str10; a = str; scanf(“%s“, a); /*正确*/,30,例7.5 :字符串拷贝,方法一:用字符数组编程 方法二:用字符指针编程,教材260页见 程序示例,31,内存空间映像,

12、静态(全局)数据区:存放全局变量和静态变量,变量的生存期是整个程序执行期间. 堆:用动态内存分配函数申请的内存在此分配,存放动态数据。生存期由程序员决定 栈:由编译器自动分配和释放 ,存放函数的参数值,局部变量的值等。,32,动态数组的实现教材288页,动态分配内存 申请内存的函数的函数原型:在 定义 void* malloc(unsigned int size); 向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULL void*:一种指针类型,具有一般性,称为普通指针,void*类型的指针可以指向任意类型的变量 释放内存的函数的函数原型: void free(void* p); 释放由malloc()。p是指向此块的指针,例7.13编程输入一个班的某课程的学生成绩,计算其平均分,然后输出.班级人数由键盘输入。 教材290页 见 程序示例,33,思考题,1.指针的概念和使用. 2.指针与数组之间的关系. 3.指针做函数参数,传地址调用的使用方法. 4.动态内存分配的使用方法 . 5.习题7.1,7.2(作业),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号