数组指针的指针操作

先看个例子,有如下语句:

int a[10];
int *pa = &a[0];
pa++;

首先指针pa指向a[0]的地址,注意后缀运算符的优先级高于单目运算符,所以是取a[0]的地址,而不是取a的地址。然后pa++pa指向下一个元素(也就是a[1]),由于paint *指针,一个int型元素占4个字节,所以pa++使pa所指向的地址加4,注意不是加1。

下面画图理解。从前面的例子我们发现,地址的具体数值其实无关紧要,关键是要说明地址之间的关系(a[1]位于a[0]之后4个字节处)以及指针与变量之间的关系(指针保存的是变量的地址),现在我们换一种画法,省略地址的具体数值,用方框表示存储空间,用箭头表示指针和变量之间的关系。

图 23.3. 指针与数组

指针与数组
  

  char *pA[12]={

       "1",

       "2"

       "3",

       "4",

       "5",

       "6",

       "7",

       "8",

    };

int nCountA =sizeof(pA)/sizeof(char *);/*此时结果为 12*/

  

 char p[10]={//定义了一个char类型的数组

       1,

       2,

       3,

       4,

       5,

       6,

       7,

       8,

       9,

       10

    };

   int nCount = sizeof(p)/sizeof(char);/*nCount结果为10*/

    NSLog(@"sizeof(p) ====== %s",&p[1]);

    NSLog(@"nCount ====== %d",nCount);

    

    /*pp[0]的首地址指向了p[1]的地址,所以pp[0]->p[1],pp[1]->p[2],pp[2]->p[3]*/

   char *pp = &p[1];

    

   for (int i=0; i<3; i++) {

        NSLog(@"charPointer ======= %hhd",pp[4]);

        pp +=2;/*pp的首地址向后移动两个char大小的位置,所以pp[0]->p[4],pp[1]->p[5],pp[2]->p[6]*/

    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/zsw-1993/archive/2012/10/23/4880735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值