版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10次指针(上)参考教材的10.110.3节,指针是c语言的重要概念。 掌握指针的用法可以使程序简洁、高效、灵活,学习也不容易。 重要的是理解以下故事的意思。 故事:很久以前,间谍阿宝接到上级的指示,去找钥匙。 经过几个曲折,情报提供商报告的:钥匙,被藏在某墓地屏幕人住的小建筑物的房间里。 在风雨交加的夜晚,阿宝潜入了一座小楼,房间很多,不知道该进哪个房间时,走廊的电话铃突然响了。 艺术家大胆,阿宝毫不犹豫地抓住听筒,陌生人说:“打开小姐的卧室,那里有线索。” 阿金跑上楼梯,打开小姐的卧室,用手电筒照了一下,看到桌子上的六个大字: 1000房间。 阿宝目一亮,就找到1000房间,取出重要的数
2、据66 (钥匙),完成任务。 10.1指针的概念,指针(pointer ) :内存中某个存储器单元的地址(编号)。 指针变量:虽然也是内存内的变量,但其值中保存着其他变量的地址。 10.1指针的概念,导入指针后,对于变量的访问(访问是取出或分配其值)方式,(1)直接访问,通过变量名访问,通过变量名直接访问(2)间接访问,该变量的指针(地址)。 例如,通过i_pointer保存变量I、强度(父亲)、强度(儿子)、馀雨(母亲)、10.2指针变量指针变量:其他变量地址(指针)的变量指针变量有以下三个属性: (1)指针变量指定的变量类型。 i_pointer指向的变量I是整数。 (2)指针变量在存储器
3、中所占的存储器单元的数量。 如果i_pointer占两个存储单元,则称为“近指针”,用near表示。 如果该变量在内存中占4个存储单元,则称为“远程指针”,用far表示。 如果未指定near或far,则缺省情况下near (3)指针变量指定的变量,即指针变量的值(地址值)是多少? 例如,i_pointer的值是2000,10.2指针变量,指针变量定义的一般形式:基础型*识别符中: *”是定义指针变量的“识别符”,指针变量名称“基础型”是该指针变量所指的变量类型的例子,表示int i,/*2 char *pointer_4; 指针代入例子int a=66; 定义/整数变量a int *p、* q
4、/p,q将指针变量p=/的值给予q,参照图2,指针代入,10.2指针变量,指针变量的代入:方法1 :例如,pointer_1=,10.2指针变量, 指针变量的引用有两个可以参照指针变量的运算符: (1),10.2指针变量,说明:定义指针变量时,指针变量指向哪个变量还没有规定,在这种情况下,不能用*运算符访问指针。 只有在程序具体指定用赋值语句指定变量时,才能访问用*运算符指定的变量. int *p; (未规定指哪个变量) *p=100; 输入访问悬挂指针、10.2指针变量、例1a和b两个整数,输出a和b、10.2指针变量、10.3指针变量作为函数的参数,例2 输入a和b两个整数,按从大到小的顺
5、序输出a和b 将10.3指针变量作为函数的参数,在程序执行过程的说明1、pointer_1=pointer_2=*p=*p1; *p1=*p2; *p2=*p; 请使用指针变量,注意不要悬挂指针。 另外,10.3指针变量作为函数的参数,函数swap ()的波形参数是指针变量,并且存在swap(pointer_1,pointer_2)两种调用方法,swap(该函数交换波形参数的值,并且获得实际参数的值因为在c语言中,实际参数和形状参数之间使用了“值传递法”,数据只能从实际参数单向传递到形状参数。波形参数值的变化不影响实际参数,10.3指针变量作为函数的参数,用于分析以下程序能否实现交换目的的in
6、t swap(int *p1,int *p2) /*交换形式参数的值*/int *p; p=p1; p1=p2; p2=p; main() int a,b; int *pointer_1、*pointer_2; 扫描(“%d,%d,%d”, 10.3以指针变量为函数的参数,总结: 1,以指针变量为函数的参数,经由指针变量返回函数指定的变量值,由此,能够将主调函数和被调函数间的数据双向地传递,以指针变量为函数的参数,实际参数波形参数值的变化不影响实际参数,也就是说,实际参数指针变量本身的值不能改变。 但是,可以改变实际的参照指针变量指定的变量的值,将10.3指针变量作为函数的参数,例3 输入a、
7、b、c三个整数,按照大小顺序输出,将10.3指针变量作为函数的参数,3 .区分: *运算符不同的情况下的作用PS、PS、PS、* p; (*表示定义指针)。 代入p=/*指针p指定的变量。 在此代入变量a。 另外,10.4数组的指针变量、指针变量可以指数组和数组元素,指针指向该数组,则对数组元素的访问可以使用数组的下标和指针两者。 另外,用指针访问数组元素可以提高程序的效率(用下标访问数组元素的程序更清楚),例如int a10; /*元素是整数*/float b10; /*要素是实数*/int *p; /*数组a的元素*/float *pf; /*因为可以指定数组b的元素*/,所以以下语句并不
8、是全部将指针p指向数组a: p=/*,将数组a的开头地址赋予p,将数组的所有元素赋予p */。 10.4数组的指针变量,指针引用数组元素,10.4数组的指针变量,例4输出整数数组的所有元素整数访问每个元素,1、后缀(常用、直观) main() int a10; PS; for(i=0; i10; I )用scanf (“% d”,10.4数组的指针变量,2,数组名(指针法)计算数组元素的地址(效率与下标法相同,不太使用) main() int a10; PS; for(i=0; i10; I )用scanf (“% d”,10.4数组的指针变量,3,指针变量访问各要素(常用,效率高),10.4
9、数组的指针变量,如果指针p指向数组a,则p i和a i,*(p i )和*(a i )的意思相同,但p和a p是指向数组中任何元素的指针变量,例如int a10; *p; for(p=a; a (p 10 ) a )打印机(“% d”,*a )是否正确?10.4数组的指针变量、10.4数组的指针变量、2、指针变量指向数组中的任意元素,请注意指针变量的当前值。 因此,使用指针时,请注意不要让指针越过边界。 例如,在本示例中,在第二个for循环中,p超出了数组的范围,但编译器无法发现此问题。 避免指针访问是程序员自己的责任,10.4数组的指针变量,3,指针使用的一些细节。 如果指针p指向数组a(p
10、=a ),则 p (或p =1),p=? *p表示什么意思? *( p )和*(p )分别表示什么意思? (*p )表示什么意思?10.4数组的指针变量,答案: p (或p =1),p是指以下元素: *p相当于*(p )。 因为和*相同的优先级,是右结合运算符。 *( p )和*(p )的作用不同。 *(p ) :先取*p,然后在p上加1。 *(p):p加1取*p。 (*p )表示p所指要素的值加1。 总结:如果p当前指向数组a中的第I个元素,*(p- )等于ai- )。 取“*p”,然后将p减少1。 (*p)-ai-,先取*p,再减1。 *( p )相当于a i,在p上加1,取*p。 *(-
11、p )相当于a-i,减去p后再取*p。、10.4数组的指针变量、数组名称和指针变量作为函数参数,按相反顺序存储例数组a的n个要素,10.4数组的指针变量、void inv(int x,int n) /*形参数为数组*/int t,I,j,m=(n-) for(i=0; i=m; i ) j=n - 1 - i; t=xi; xi=xj; xj=t; ,主() 静态int I,a 10 = 3,7,9,11,0,6,7,5,4,2 ; 打印( the original array :n ); for(i=0; i10; I )打印( % d ,ai ); printf(n ); inv(a,10
12、 )打印机( thearrayhasbeeinverted :n ); for(i=0; i10; I )打印( % d ,ai ); printf(n ); ,10.4数组的指针变量和函数inv ()可以将指针用作参数,执行情况与将数组用作参数相同。 void inv(int *x,int n) int *p,t,*i,*j,m=(n-1)/2; i=x; /*指针I指向数组的第一个元素*/j=xnn-1指针j指向数组的最后一个元素*/p=x m指针p指向数组中央的元素*/for (; i=p; I、j-) t=*i; *i=*j; *j=t; 返回; ,10.4数组的指针变量,10.4数组的指针变量,总结:数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度冶金工业技能鉴定真题及答案详解【各地真题】
- 2024-2025学年度电工能力提升B卷题库附答案详解(突破训练)
- 2024-2025学年园林绿化作业人员试题【模拟题】附答案详解
- 2024-2025学年度注册公用设备工程师考前冲刺练习带答案详解(满分必刷)
- 2024-2025学年度公务员(国考)通关考试题库及参考答案详解【能力提升】
- 2024-2025学年度临床执业医师模拟试题有答案详解
- 客户2026年新项目合作意向商洽函(3篇)
- 2024-2025学年度河北省单招考试一类 《文化素质数学》考前冲刺测试卷附参考答案详解(培优A卷)
- 2024-2025学年度电工考前冲刺练习及完整答案详解【全优】
- 2024-2025学年度中医执业医师高频难、易错点题及参考答案详解(研优卷)
- 产科器械设备管理制度
- (苏科2024版)信息科技四年级6.1 数据表达的多样化 课件(新教材)
- 外墙吊绳安全协议书
- GA/T 2187-2024法庭科学整体分离痕迹检验规范
- 江苏省南京市联合体2024-2025学年七年级下学期第一次月考试卷 数学 (原卷版+解析版)
- 《主题一 探秘食品添加剂》教学设计-2023-2024学年五年级下册综合实践活动辽师大版
- 热力网值班员(高级)考试题库
- 2025年亳州职业技术学院单招职业倾向性考试题库带答案
- 碳排放与碳减排
- ERAS围手术期患儿的护理
- 工程造价咨询服务投标方案(技术方案)
评论
0/150
提交评论