关于取地址&和解引用*的小问题
首先先看一个题目:
写出下列程序的代码
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
运行结果:
/*
&a占据20B空间
&a+1直接偏移到第6格,指针ptr指向6,
a表示数组的首地址,a+1指向第一个位置,*(a+1)解引用得到2,*(ptr-1)解引用第5个位置得到结果5
输出结果:
2,5
*/
再看一个例子:
输出结果:
/*
Base(long = 0)
Derived(long = 0, long = 0)
对象Derived的地址: 0x7ffde7eb89d0
对象Derived的地址: 0x7ffde7eb89d0
虚表的地址: 0x55c83a3b7d00
虚函数的地址: 0x55c83a1b6fea
Derived::func1()
第一个虚函数的地址: 0x55c83a1b6fea
Derived::func2()
第二个虚函数的地址: 0x55c83a1b7022
Derived::func3()
第三个虚函数的地址: 0x55c83a1b705a
~Derived()
~Base()
*/