前几天学完了指针,今天就来做一些经典的题来巩固自己的知识。
1.
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return 0;
}
解析:首先这道题答案是2,5.因为首先它先定义一个数组,然后定义一个指针变量指向下一个数组。a+1表示对第二个元素的地址,在解引用表示第二个元素,所以第一个答案是2。 (&a+1)表示下一个数组的地址也就是ptr,所以ptr-1就是最后一个元素的地址,在解引用就是最后一个元素5。
2.
struct Test
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
p=0x100000
(1)p+0x1=0x100014;
(2)(unsigned long)p+0x1=0x100001;
(3)(unsigned int*)p+0x1=0x100004;
解析:首先这是一个结构体,而它的大小为(4+4+2+1*2+2*4)=20。然后第一问,p+1就