某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下:
int main(void)
{
int a[4] = {1, 2, 3, 4};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
printf("%x, %x/n", ptr1[-1], *ptr2);
return 0;
}
问,在x86平台下输出啥?
题目虽然恶心了点,但作为一个例子来分析,还是挺好玩的。学过C语言的朋友可以暂且不看下文,自己试着分析一下,看看结果跟我的是否一样,也不失为一件趣事。
下面把这道题牵涉到的所有边边角角的问题梳理一遍,详细讨论如下:
1、&a+1
首......
阅读全文