Q:

Dynamic casting pointer to Reference and reference to pointer

I am new to CPP and trying to learn dynamic casting . Unfortunately, am getting the below error 
main.cpp: In function 'void PRINT(A&)':
main.cpp:30:40: error: cannot dynamic_cast 'Ref_A' (of type 'class A') to type 'class B*' (source is not a pointer) B *Ref_PTR = dynamic_cast<B*>(Ref_A);

If some one can teach me, what is going on ?
Can we cast reference to pointer or pointer to reference ?
Can we cast only Base reference to Derived reference ?
Can we cast only Base pointer to derived pointer ?
========================================================================
#include <iostream>
#include <exception>
#include <typeinfo>

using namespace std;

class A {
public:
  virtual void dummy() {cout<< "Am in Base Class \n"; }
};

class B : public A {
public:
  virtual void dummy() {cout<< "Am in first Derived Class \n"; }
};

class C : public B {
public:
  virtual void dummy() {cout<< "Am in second Derived Class \n"; }
};

void PRINT(A &);

int  main()
{
   B b;
   C c;
   PRINT(b);
   PRINT(c);
   return 0;
}

void PRINT(A &Ref_A )
{
    try
    {
        B &Ref = dynamic_cast<B&>(Ref_A);
        Ref.dummy();
    }
    catch(std::bad_cast exp) { std::cout<<"Caught bad cast in the Second catch \n"; }

    B *Ref_PTR = dynamic_cast<B*>(Ref_A);
    if (Ref_PTR)
     Ref_PTR->dummy();
    //Ref_A.dummy();
}

A:

Can we cast reference to pointer or pointer to reference ? 

Nope. A reference and a pointer are different beasts in the C++ type ecosystem.

Can we cast only Base reference to Derived reference ? 
  Can we cast only Base pointer to derived pointer ?

Generally yes. We cast references to references or pointers to pointers. But that's not to say we can't obtain a pointer from a reference. That's what the address-of operator is for:
B *Ref_PTR = dynamic_cast<B*>( &Ref_A );

