关于取地址&和解引用*的小问题


首先先看一个题目:

写出下列程序的代码

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()
*/

 

 

相关