算法设计基础题目

上传人:宝路 文档编号:47912872 上传时间:2018-07-06 格式:PPT 页数:36 大小:2.18MB
返回 下载 相关 举报
算法设计基础题目_第1页
第1页 / 共36页
算法设计基础题目_第2页
第2页 / 共36页
算法设计基础题目_第3页
第3页 / 共36页
算法设计基础题目_第4页
第4页 / 共36页
算法设计基础题目_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《算法设计基础题目》由会员分享,可在线阅读,更多相关《算法设计基础题目(36页珍藏版)》请在金锄头文库上搜索。

1、IBM research 2003 IBM CorporationSRDS Workshop计算机学院 软件工程教研室 张荣博手机:13840293107Email:版权所有:沈阳航空航天大学算法设计基础2第4讲 指针专题目标:本章旨在向学员介绍指针的概念以及各种指针的用法,通过本章的学习,学员应该掌握如下知识: 内存、地址与指针的概念 指针的用法版权所有:沈阳航空航天大学算法设计基础地址的概念3内存地址:物理内存中存储单元的编号。使用内存:在地址所标识的存储单元中存放数据。注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。一个是address;另一个是value;访问方式:(1)直

2、接访问使用变量名进行存取(2)间接访问通过该变量的地址来访问addressnamevalue版权所有:沈阳航空航天大学算法设计基础4程序中: int i; float k; 内存中每个字节有一个编号-地址.200020022006内存0ik编译或函数调用时为其分配内存单元变量是对程序中数据 存储空间的抽象变量与内存版权所有:沈阳航空航天大学算法设计基础指针与指针变量 指针:一个变量的地址 指针变量:专门存放变量地址的变量整型变量i变量i_pointer指针指针变量变量的内容 变量的地址i_pointer200010i200020022006.102000变量i地址是2000,指针变量i_poi

3、nter地址是2002版权所有:沈阳航空航天大学算法设计基础63变量i 2000i_pointer*i_pointeri*i_pointer *i_pointer=3指针变量与其所指向的变量之间的关系版权所有:沈阳航空航天大学算法设计基础指针变量的定义7一般形式: 存储类型 数据类型 *指针名 ;合法标识符指针变量本身的存储类型指针的目标变量的数据类型例 int *p1,*p2;float *q ;static char *name;注意:1、int *p1, *p2; 与 int *p1, p2;2、指针变量名是p1,p2 ,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指

4、针变量定义后,变量值不确定,应用前必须先赋值版权所有:沈阳航空航天大学算法设计基础指针变量的初始化及赋值8 指针变量的初始化一般形式:存储类型 数据类型 *指针名 = 初始地址值;赋给指针变量例 int i,j;int *pointer_1,*pointer_2;pointer_1= pointer_2=例 float i,j;float *pointer_1,*pointer_2;pointer_1= pointer_2=static int *p= / ( ). 不能用auto变量的地址 去初始化static型指针 Why ?一个指针变量只能指向同一个类型的变量例 int i,j;floa

5、t *pointer;pointer= 版权所有:沈阳航空航天大学算法设计基础例题10#includevoid main() int a=5;int *p=a=10;printf(“a:%dn“,a);printf(“ *p:%dn“,*p);printf(“printf(“p:%dn“,p);printf(“版权所有:沈阳航空航天大学算法设计基础11main () int a,b; int *pointer_1, *pointer_2; /* 定义指针变量 */ a = 100; b = 10; pointer_1 = pointer_2 = printf(“%d,%dn“, a,b );

6、printf(“%d,%dn“, *pointer_1,*pointer_2 ); 程序运行结果:scanf(“%d,%d“, p1 = p2 = if (a void main() int i,a10=3,7,9,11,0,6,7,5,4,2;inv(a,10);printf(“The array has been reverted:n“);for(i=0;imax) max=*p;else if(*pxk)k=j;if(k!=i)t=xi;xi=xk;xk=t; 选择法 版权所有:沈阳航空航天大学算法设计基础指针运算小结291、指针变量加/减运算p+、p-、p+i、p-i、p+=i、p-=

7、i加1表示指向下一个数据。2、指针变量赋值p = 变量a的地址赋给p,即指针p指向ap = array; 数组array首地址赋给pp = 数组元素arrayi的地址赋给pp = max; 函数max的入口地址赋给pp1 = p2; 指针p2的值赋给指针p1,即p1、p2所指的数据相同p=NULL; 指针变量可以由空值,NULL的值为0 版权所有:沈阳航空航天大学算法设计基础303、空指针 p = NULL空指针p=NULL表示p不指向任何数据。在stdio.h中,NULL被定义为0:#define NULL 0习惯上,不使用 p = 0而使用 p = NULL指针变量p可以与NULL作比较,

8、例: if (p = = NULL) .注意:空指针不指向任何数据,与p未赋值不同。当p未赋值时,其值是不确定的,而空指针的值是确定数0。版权所有:沈阳航空航天大学算法设计基础31、指针变量相减。当p1、p2指向同一个数组的元素,指针相减p2-p1等于p1、p2间的元素个数。注意:指针相加无意义。5、两个指针的比较当p1、p2指向同一个数组的元素时,可以比较,如、p1 p2。若p1、p2不是指向同一个数组的元素,比较无意义。版权所有:沈阳航空航天大学算法设计基础野指针32 “野指针”产生的3种原因:指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱

9、指一气。指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。指针操作超越了变量的作用范围。版权所有:沈阳航空航天大学算法设计基础33 避免“野指针”产生的对策: 使用指针前一定要保证它指向了有效的内存空间(或者 申请,或者让指针指向一块合法的空间;不要忘记为数 组和动态内存赋初值。防止将未被初始化的内存作为右 值使用。 用malloc或new申请内存之后,应该立即检查指针值是 否为NULL。防止使用指针值为NULL的内存;动态内存的 申请与释放必须配对,防止内存泄漏。用free或delete 释放了内存之后,立即将指针设置为NULL。 避免数组或指针的下标越界,

10、特别要当心发生“多1”或 者“少1”操作。版权所有:沈阳航空航天大学算法设计基础习题341 指针变量a所指的字符串长度为 ,这个长度是可以用strlen(a)测出来的。char *a=“nMY Name is”zhang li”.n”;(1)28 (2) 27 (3) 26 (4) 24 (5)232 下面程序的作用是,将两个变量中的值互换,请检查程序是否正确,如不正确的,改正之。main ( )int a=3,b=4;int *p1,*p2,*p;p1=p=p1;p1=p2;p2=p;printf(“a= %d,b= %dn”,a,b);*p1,*p2版权所有:沈阳航空航天大学算法设计基础3

11、53 已设p1和p2为指针变量,且已指向同一个整型数组中的元素,a是一个整型变量,问下面哪一个语句不能正确执行?(1) a=*p1 (2) a=*p1+*p2(3) a=*p1-*p2 (4) p1=a-p2 4 有一个二维数组a3,4,2行3列元素的正确表示方法为 。(1) p=a;k=printf(“%d“,*(p);printf(“%dn“,*k); 版权所有:沈阳航空航天大学算法设计基础366 若有语句:int a=4,*p=下面均代表地址的一组选项是:1) a,p,ptr =a;for ( ;ptra+7;ptr+=2)putchar(*ptr);1) Program 2) Porm3) 有语法错误; 4) Por

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

当前位置:首页 > 中学教育 > 教学课件

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