﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-断编残简 云程发轫</title><link>http://www.cppblog.com/ajeyone/</link><description>falling apple</description><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 21:45:09 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 21:45:09 GMT</pubDate><ttl>60</ttl><item><title>访问数组的下标法和指针法的区别</title><link>http://www.cppblog.com/ajeyone/archive/2008/12/31/70879.html</link><dc:creator>Ajey</dc:creator><author>Ajey</author><pubDate>Wed, 31 Dec 2008 14:12:00 GMT</pubDate><guid>http://www.cppblog.com/ajeyone/archive/2008/12/31/70879.html</guid><wfw:comment>http://www.cppblog.com/ajeyone/comments/70879.html</wfw:comment><comments>http://www.cppblog.com/ajeyone/archive/2008/12/31/70879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ajeyone/comments/commentRss/70879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ajeyone/services/trackbacks/70879.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 本文源自《C++沉思录》第12章，添油加醋一番，仅供娱乐。<br><br>&nbsp;&nbsp;&nbsp; 在C++中，访问一个数组中的元素有两种方法，一种使用下标访问，另一种是用指针，代码写法如下<br><br>&nbsp;&nbsp;&nbsp; void f(int&amp; i);&nbsp; // 假设存在这样一个函数<br>&nbsp;&nbsp;&nbsp; int a[N];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 这是一个数组<br><br>&nbsp;&nbsp;&nbsp; // 下标法遍历整个数组<br>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; N; ++i) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f(a[i]);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; // 指针法遍历整个数组<br>&nbsp;&nbsp;&nbsp; for (int* p = a; p &lt; a + N; ++p) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f(*p);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; 很明显的区别是：下标写法比较易懂，程序意图也很清晰。而指针写法会引起对指针头疼者的反感，但是指针版本的速度会比较快一点——虽然差别不是很大。<br><br>&nbsp;&nbsp;&nbsp; 更深层次的区别是：下标法中使用的下标表示的就是一个数字，这个下标并不一定只用来索引数组，还可以拿它做其他事情，比如你想初始化一个数组：值为下标的平方。那么使用下标就可以这样写：a[i] = i * i; 如果用指针方法必须另外再定义一个整数——这使得不但指针要递增，这个整数也要递增，没有下标法简洁。<br><br>&nbsp;&nbsp;&nbsp; 下标法要指定一个数组中的元素，必须依赖数组的名字和数组中元素的位置：可以用一个下标访问两个数组中位置相同的元素，在复制数组的时候可以这样使用：a[i] = b[i]; 指针法不需要了解数组的名字，也不需要知道元素的位置，指针本身就包含了全部的信息，能够从头到尾依次访问整个数组的元素。<br><br>&nbsp;&nbsp;&nbsp; 这个区别本质上是设计上的区别，而并非效率上的考虑，如果使用下标使得程序更加简单易懂而且逻辑合理，那么就使用下标，而且指针法还有一定的隐患：如果数组已经被销毁，指向数组元素的指针则会失效，指向非法内存。<br><br>&nbsp;&nbsp;&nbsp; 其实平时基本不会用指针来遍历数组，大多数都不只是简单地遍历数组，而是要利用下标值进行某些操作，而像复制数组等简单操作可以利用STL的模板算法搞定。下标法的好处相比指针的不方便性使得指针法遍历不常使用。<br><br><img src ="http://www.cppblog.com/ajeyone/aggbug/70879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ajeyone/" target="_blank">Ajey</a> 2008-12-31 22:12 <a href="http://www.cppblog.com/ajeyone/archive/2008/12/31/70879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>