漫步云端

移动开发(Android、iPhone、Windows Mobile) | JAVA | C | C++ | .net | Objective C | 微软企业开发技术 | 嵌入式系统设计与开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ 数组和指针类型的关系

Posted on 2010-12-10 23:37  charley_yang  阅读(1107)  评论(0编辑  收藏  举报

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
}