1.
已知下面的数组定义
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
那么 只简单写
ia;
意味着什么呢
数组标识符代表数组中第一个元素的地址 它的类型是数组元素类型的指针 在ia这个例子中 它的类型是 int* 因此 下面两种形式是等价的 它们都返回数组的第一个元素的地址
ia;
&ia[0];
类似地 为了访问相应的值 我们可以取下列两种方式之一
// 两者都得到第一个元素的值
*ia;
ia[0];
我们知道怎样用下标操作符来访问第二个元素的地址
&ia[1];
同样 下面这个表达式
ia+1;
也能得到第二个元素的地址等等 类似地 下面两个表达式都可以访问第二个元素的值
*(ia+1);
ia[1];
但是 如下的表达式
*ia + 1; // 解引用操作符比加法运算符的优先级高,结果是将第一个元素加1
与下面的表达式完全不同
*(ia + 1); // 括号运算符比解引用操作符的优先级高,结果是得到第二个元素的值
2.
通过指针遍历数组
#include <iostream>
template <class elemType> //模板函数
void print( elemType *pbegin, elemType *pend )
{
//pend指针执行最后一个元素的下一位
while ( pbegin != pend ) {
cout << *pbegin << ' ';
++pbegin;
}
}
//主函数
int main()
{
int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
double da[4] = { 3.14, 6.28, 12.56, 25.12 };
string sa[3] = { "piglet", "eeyore", "pooh" };
print( ia, ia+9 ); //第二个参数指针 指向数组最后一个元素的下一位
print( da, da+4 ); //da+3+1
print( sa, sa+3 ); //sa+2+1
}