复习下数组名的相关操作

 

int a[5] ={1,2,3,4,5};
int *ptr1 = (int *)(a+1);
int *ptr2 = (int *)(&a+1);
int *ptr3 = (int *)((int)a + 1);

假设数组的首地址为 0x100,

则ptr1,ptr2,ptr3的值分别为多少呢?

想偷懒的同学请潜到水底看答案!

 

 

 

 

 

 

 

 

 

 

 

由于a为数组名,即也可表示为数组首地址,即a[0]的地址,

所以 a+1为a[1]的地址;

答案:ptr1 = 0x104

 

&a为类型是int[5]的指针,所以

&a+1就会加上5*sizeof(int)的长度;

答案:ptr2 = 0x100+5*4 = 120

 

int(a)+1

答案:ptr3 = 0x101

     

 

posted @ 2010-12-17 16:59  清秋  Views(259)  Comments(0)    收藏  举报