复习下数组名的相关操作
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

浙公网安备 33010602011771号