码迷,mamicode.com
首页 > 其他好文 > 详细

一种计算 指针 的方法

时间:2015-10-28 12:21:28      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

适用于地址加1    

公式为     X+1 = (unsigned int) X  + sizeof (* X)  其中 X 是个指针

解释:

int a [5] = {1,2,3,4,5};

计算 a+1     和     &a +1

利用公式

 a+1 = (unsigned int) a + sizeof(*a) = (unsigned int) a  + sizeof (a[0]) = &a[1] //  a+1 指向 a[1]

&a+1 = (unsigned int) &a + sizeof(* & a) = (unsigned int) a + sizeof (a) = 数组后面的位置//  &a+1 指向数组后面的地址

 

先搞清楚 X 的含义 ,如 数组名a  带表数组第一个元素的地址  才能得出正确的   *X

 

int b[2][3] = {{1,2,3},{4,5,6}};

计算 b+1 ,&b +1 ,b[1] +1,&b[1]+1,&b[0]+1

将二维数组看做特殊的 一维数组   int b[2] = {b0,b1};  b0 = {1,2,3}  b1= {4,5,6} 数组名 b 表示 第一个元素的地址 ,即 b0的地址  

b+1 = (unsigned int) b +sizeof( *b) = (uint) b + sizeof( b[0]) =b[1] //  b+1 指向  b[1]  

&b+1 =(unsigned int) &b + sizeof( * &b) = (uint)&b + sizeof (b) = 数组后面的位置

b[1] +1 = (unsigned int) b[1] + sizeof (* b[1]) = (uint)b[1] + sizeof (b[1][0]) =  &b[1][1]  // b[1] +1 指向 b[1][1]

&b[1]+1 = (unsigned int) &b[1] + sizeof (* &b[1])= (uint)&b[1] + sizeof (b[1]) = 数组后面的位置 

&b[0]+1 =  (unsigned int) &b[0] + sizeof (* &b[0])= (uint)&b[0] + sizeof (b[0]) =  &b[1] = &b[1][0]

验证:

#include "stdio.h"

int main()
{
int b[2][3] = {{1,2,3},{4,5,6}};
int (*p1)[] = b+1; //b[1]地址
int *p2 = &b+1; //数组B后面的地址
int *p3 = b[1] +1; //5
int *p4 = &b[1] +1;// 数组B 后面的地址
int *p5 = &b[0]+1;// 4

printf("*p1 = %d\t p1=%d\n",*p1,p1); // P1指向 b[1]     *p1 = b[1] = &b[1][0]
printf("*p2 = %d\t p2=%d\n",*p2,p2);//  p2指向数组外
printf("*p3 = %d\t p3=%d\n",*p3,p3);//  p3 指向b[1][1]  *p3 = 5  p3 = &b[1][1]
printf("*p4 = %d\t p4=%d\n",*p4,p4);//  p4指向数组外
printf("*p5 = %d\t p5=%d\n",*p5,p5);// p5 指向b[1][0]   *p5 = 4  p5 = &b[1][0]


return 0;
}

 

一种计算 指针 的方法

标签:

原文地址:http://www.cnblogs.com/cloudddl/p/4916791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!