上一篇的题目不知感觉如何,感觉良好的话,就进入下面的内容
注:这次的题目会更难
那就开始吧
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;
}
问上述代码的结果是什么
还是逐个来分析
数组名是首元素的地址+1后解引用就是a[1]
&a是取出整个数组的地址,+1后便来到数组末尾,如图:
所以ptr指向数组末尾
故ptr-1后来到a[4]的起始位置
解引用后结果为5
输出结果为2 5
2.
struct Test
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}
这题考查指针+1后是增加多少个字节
p+0x1&#x