class A
{
public :
void print()
{
printf("hello!");
}
int i;
int j
}
void main()
{
A *a = (A *)NULL;
a->print(); //能正确编译并正常执行,因为编译后语句变为print(A*)存放在代码段,权限检查在编译时进行,最终可执行程序与不使用NULL指针,所以运行不会出错
printf("%x", &(a->j)); //也能正确编译并正常执行,因为a->i仅表示取a的地址加j的偏移量(4),并不涉及对这个地址的读取或写入,如果在下面的代码中对该地址读取
//或写入时就会出错,NULL表示0地址,对此地址的读取和写入都是非法的。
}