请问一个超小程序的一个小疑点

请教一个超小程序的一个小问题
#include   <iostream>  
using   namespace   std;  
class   test  
{  
private:  
int   number;  
public:  
float   socre;  
int   pp;  
public:  
int   rp(int);  
};  
int   test::rp(int   a)//在外部利用域区分符定义test类的成员函数  
{  
number=100;  
return   a   +   number;  
}  

void   run(test   *p)//利用指针调用  
{  
cout < <p-> rp(100) < <endl;  
}  
void   run(test   &p)//利用引用  
{  
cout < <p.rp(200) < <endl;  
}  

void   main()  
{  
test   a;  
run(&a);  
run(a);  
cin.get();  
}  


问题来了!这段里
void   run(test   *p)//利用指针调用  
{  
cout < <p-> rp(100) < <endl;  
}  
void   run(test   &p)//利用引用  
{  
cout < <p.rp(200) < <endl;  
}  
这里又是指针又是引用又是-> 又是.的是什么意思?
请解释一下很感激!

------解决方案--------------------
run(&a); 调用指针
run(a);引用
------解决方案--------------------
这是C++基础问题,所谓引用调用,指的是传给函数的参数是这个参数的地址,如上面的
void run(test &p)//这里
调用时run(&a); 这里a被传入了函数,而在函数体内修改的是a的本身,而不是a 的一个拷贝,指针调用和引用调用类似。
------解决方案--------------------
run(&a); 调用的是void run(test *p)//利用指针调用 因为这个函数要的是带地址的参数,所以你要给他一个地址了,那&a 传递的就是a的地址了。
run(a); 调用的是void run(test &p)//利用引用 因为这个函数的参数给他的参数a起了一别名,就是他把a叫做p了,当然a、p指的是同一个东东了。是指针当然要用 "-> ",是引用就要用 ". "操作符了.