正文

C++入门第6章指针6.3 数组与指针[续]2008-10-02 12:20:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38645.html

分享到:

 

for(p=a;p<(a+10);p++)
cout<<*p<< ;      //p先后指向a[0]~a[9]
cout<<endl;
return 0;
}
运行情况与前相同。请仔细分析p值的变化和*p的值。
3种方法的比较:
方法(1)(2)的执行效率是相同的。第(3)种方法比方法(1)(2)快。这种方法能提高执行效率。
用下标法比较直观,能直接知道是第几个元素。用地址法或指针变量的方法都不太直观,难以很快地判断出当前处理的是哪一个元素。
 
在用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组以后的内存单元。如果有
int a[10],*p=a;                 //指针变量p的初值为&a[0]
cout<<*(p+10);                  //要输出a[10]的值
在使用指针变量指向数组元素时,应切实保证指向数组中有效的元素。
指向数组元素的指针的运算比较灵活,务必小心谨慎。下面举几个例子:
如果先使p指向数组a的首元素(p=a),则:
(1) p++(或p+=1)。使p指向下一元素,即a[1]。如果*p,得到下一个元素a[1]的值
(2) *p++。由于++*同优先级,结合方向为自右而左,因此它等价于*(p++)。作用是: 先得到p指向的变量的值(*p),然后再使p的值加1。例6.5(3)程序中最后一个for语句:
for(p=a;p<a+10;p++)
cout<<*p
可以改写为
for(p=a;p<a+10;)
cout<<*p++;
(3) *(p++)*(++p)作用不同。前者是先取*p值,然后使p1。后者是先使p1,再取*p。若p的初值为a(即&a[0]),输出*(p++)得到a[0]的值,而输出*++p)则得到a[1]的值。
 
(4) (*p)++表示p所指向的元素值加1,即(a[0])++,如a[0]=3,则(a[0])++的值为4。注意: 是元素值加1而不是指针值加1
(5) 如果p当前指向a[i],则
*(p--)    先对p进行*运算,得到a[i],再使p1pa[i-1]
*(++p)   先使p自加1,再作*运算,得到a[i+1]
*(--p)   先使p自减1,再作*运算,得到a[i-1]
++--运算符用于指向数组元素的指针变量十分有效,可以使指针变量自动向前或向后移动,指向下一个或上一个数组元素。例如,想输出a数组100个元素,可以用以下语句:
 
p=a;                        p=a;
while(p<a+100)         while(p<a+100)
cout<<*p++;           {cout<<*p;
p++}
在用*p++形式的运算时,很容易弄错,一定要十分小心,弄清楚先取p值还是先使p1

阅读(1429) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册