关于C++ this指针的一个有趣的有关问题

关于C++ this指针的一个有趣的问题
以下程序的运行结果是什么,以及把注有****的这句去掉后的运行结果是什么,关键是为什么会有这个结果,谢谢大家了哈!
#include <stdio.h>
class MyClass
{
public:
 int data;
 MyClass(int data)
 {
  this->data=data;
 }
 void print()
 {
  printf("%d\n",data); //****
  printf("hello\n");
 }
};
int main()
{
 MyClass*p;
 p=new MyClass(1);
 p->print();
 p[0].print();
 p[1].print();
 p[1000].print();
 return 0;
}

在百度上看到的,回答是:
MyClass(int data)
 {
  this->data=data;
 }

构造函数里有三个data ,this->data是这个类的变量. 其余两个是这个类的函数的变量

p和p[0]相同不多说 p[1]和p不同应该是p[1]调用的默认构造函数所以 data没有初始化,而非楼上说的


有两个疑问:
第一:
void print()
 {
  printf("%d\n",data); //****
  printf("hello\n");
 }


函数里面没有定义 data ,data用的是那个变量? 类里面的 还是MyClass(int data)里面的,MyClass(int data)里面data没有声明可外部调用呀。

第二:

 p[0].print();
 p[1].print();
 p[1000].print();


p->print(); 我还知道是调用的是初始化MyClass(1);之后,MyClass类里面的print(),但是p[1].print();p[1000].print();我就不知道调用什么了,P[1]和P[1000]指向哪里?指向哪个类?







------解决方案--------------------
环境 vs2008 debug
第一个问题比较简单,成员函数中使用成员变量会默认加上this,和下面的代码是一样的
Assembly code

void print()
 {
  printf("%d\n",this->data); //****
  printf("hello\n");
 }