title: passing pointer type to template argument
body: <p>I wrote the following code:</p>
  
  <pre><code>template &lt;typename T&gt;
  void  myname(T* x)
  {
      cout&lt;&lt;"x is "&lt;&lt;x;
  }
  </code></pre>
  
  <p>and I Invoked:</p>
  
  <pre><code>char *p="stackOverflow";
  myname(p);
  </code></pre>
  
  <p>It prints <code>stackOverflow</code>.</p>
  
  <p>But if I change the template argument from  <code>(T* x)</code>  to <code>(T x)</code> I get the same result.</p>
  
  <p>So what is the difference between the two template parameters?</p>
  
  <pre><code>void  myname (T x)  
  </code></pre>
  
  <p>and </p>
  
  <pre><code>void myname (T* x)
  </code></pre>