首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 复习资料 > 程序员资料 > 正文

2011年软件水平考试程序员之程序设计知识点18

考试吧整理“2011年软件水平考试程序员之程序设计知识点18”,方便考生备考!

  5.2 指针变量的应用

  1.指向变目的指针变量

  当指针变量指向某个对象(它的值不是NULL)时,可以用

  * 指针变量

  引用指针变量所指向的对象。如语句:

  ip=&i;

  j=* ip;

  实现将指针变量ip所指变量的内容(即变量i的内容)赋给变量j。其中,赋位号右边的*ip 表示引用中所指变量的内容。上述赋值等价于:

  j=1;

  语句

  *ip=200;

  实现向指针变量ip所指变量(即变量i)赋值200。其中,赋值号左边的。ip表示引用ip所指变量。上述赋值等价于

  i=200;

  一般地,记号“* 指针变量名”与指针变量所指变量的“变量名”等价。要特别注意:指针变量之间的赋值,指针变量所指向的变量之间的赋值,这两种赋值在表示方法上的区别。如语句

  intpt=ip;

  使两个指针变量intpt与ip指向同一个对象,或都不指向任何对象(如果ip的值为NULL)。而语句

  * intpt=*ip;

  实现将ip所指变量的值赋给intpt所指的变量。这里要求中与intpt的值都不可以是NULL。通过指针变量引用它所指的变量,实际引用哪一个变量,取决于指针变量的值。改变指针变量的值,就是改变了它的指向。指针变量最主要的应用有两个方面:一是让指针变量指向数组的元素,以便逐一改变指针变量的指向,遍历数组的全部元素;二是让函数设置指针形式参数,让函数体中的代码通过指针形式参数引用调用环境中的变量或函数。

  为正确使用指针变量和它所指向的对象,特指出以下几点注意事项:

  (1)指针变量定义与引用指针变量所指对象采用相似的标记形式(* 指针变量名),但它们的作用与意义是完全不同的。在指针变量定义中(如int *ip;),指针变量名之前的符号“*”说明其随后的标识符是指针变量名。如果指针变量定义时带有初始化表达式,如

  int i, * ip=&i;

  初始化表达式的地址是赋给指针变量本身,而不是指针变量所指对象(实际上,在初始化之前,指针变量还未指向任何对象)。

  (2)通过指向变量i的指针变量ip引用变量三与直接按其名i引用变量i ,效果是相同的,凡直接按名可引用处,也可以用指向它的某个指针变量间接引用它。如有

  int i, *ip=&i;

  则凡变量i能使用的地方,*ip一样能用。

  (3)因单目运算符* 、&、++和--是从右向左结合的。要注意分清运算对象是指针变量、还是指针变量所指对象。如有

  int i,j,*ip=&i;

  语句

  j=++*ip;

  是指 ip所指向的变量(变量i)的内容加1,加1后的值赋给变量j。也就是说,++*ip相当于++(*ip)。而语句j=*ip++;相当于语句j=*ip; ip++;这是因为先求值的是表达式 ip++,它的求值规则是,表达式的值为原来ip的位,然后ip的内容增加了 1个单位。所以。 ip++的表达式值与*ip相同,并在*ip++求出表达式值的同时,指针变量ip增加了1个单位。这样,ip不再指向变量i,这种情况常用在指针指向数组元素的情况,在引用数组某元素之后,自动指向数组的下一个元素。而语句j=(*ip)++;则是先引用ip所指向的对象,取ip所指向的对象的内容赋给j,并让中所指向的对象的内容增加1个单位。

  2.指向一维数组元素的指针变量

  指针变量也能指向数组的元素。设有以下变量定义:

  int a[100],*p;

  赋值运算p=&a[0]使p指向a[0]。表示&a[0]还有更简洁的方法,即数组名a。按约定,一维数组名表达式的值为数组存储区域的开始地址,即数组首元素的指针。对指向数组元素的指针允许作有限的运算。设有代码:

  int *p,*q,a[100] ;

  p=&a[10] ; q=&a[50] ;

  (1)指向数组元素的指针可与整数进行加减运算。利用数组元素在内存中顺序连续存放的规定,和地址运算规则,有表达式 a+1为 a[1] 的地址,a+2为 a[2]的地址。一般地,表达式a+i为a[i]的地址。把这个结论应用于指向数组元素的指针,同样地成立。若p的值为a[0]的地址,则表达式p+i的值为a[i]的地址。或者说,p+i的值为指向a[i]的指针值。若p指向数组元素 a[10],则 p+n就表示指向数组元素 a[10+n],这里n是任意的整数表达式。

  一般地,当指针变量指向数组a的元素时,不论数组元素的类型是什么,指针和整数n进行加减运算时,总是根据所指元素的数据存储字节长度 sizeof a[0] ,对n放大,保证加减n,使指针植向前或向后移动n个元素位置。

  (2)当两个指针指向同一个数组的元素时,允许两个指针作减法运算。其绝对值等于两指针所指数组元素之间相差的元素个数。如表达式&a[4O]-&a[0]的值为40。

  (3)当两个指针指向同一个数组的元素时,这两个指针可以作关系比较(<,<=, ==,>,>=,!=)。若两指针p和q指向同一个数组的元素,则p==q为真表示p,q指向数组的同一个元素;若p  利用运算符*可引用指针所指对象,*(a+i)表示引用a+i所指向的数组元素a[i] 。这样。(a+i)就是 a[i]。对于指向数组元素的指针变量p,若p指向a[10],*(p+i)表示引用p+i所指向的数组元素 a[10+i]。

  与用数组名和下桥引用数组元素的标记法相一致,指向数组元素的指针变量也可带下标引用数组的元素,即*(p+i)也可写成p[i] 。但若p=&a[10],则p[i]引用的是a[10+i],p[2]引用的是a[8]。

  综上所述,引用数组元素有以下多种形式:

  (1)用数组元素的下标引用数组元素,如 a[5]。

  (2)利用数组名表达式的值是数组首元素指针的约定,可利用指针表达式间接引用数组元素,如*(a+i) 。

  (3)利用指向数组元素的指针变量,用它构成指向数组元素的指针表达式,并用该表达式引用数组元素。如*(p+i)或p[i]。

  这里要强调指出用数组名a表达数组元素指针与用指向数组元素的指针p来表达数组元素的指针,在实际应用上的区别:p是变量,其值可改变,如p++;而数组名a只代表数组a的首元素的指针,它是不可改变的,程序只能把它作为常量使用。

1 2 3 下一页
  相关推荐:

  2011软考程序员考试复习笔试知识点整理汇总

  2011年软考程序员考试模拟试题及答案(上午题)

  2011年软考程序员考试模拟试题及答案(下午题)

文章搜索
软件水平考试栏目导航
版权声明:如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。