title: C argv[2]++ vs (char*)argv[2]++?
body: <p>Why are argvs act odd?
  Example:</p>
  
  <p>This will work as expected, print the 1st character of the 1st argument.</p>
  
  <pre><code>printf("%c", *argv[1]);
  </code></pre>
  
  <p>This however will print the character that's in the ascii table <em>(aka "one bigger" represented as a number)</em> instead of printing the 2nd character of the 1st argument:</p>
  
  <pre><code>printf("%c", *(argv[1] + 1);
  </code></pre>
  
  <p>Slight modifications will do nothing, exact same result:</p>
  
  <pre><code>printf("%c", *(argv[1] + sizeof(char));
  </code></pre>
  
  <p>The only thing that helps is actually casting argv[2] to char*:</p>
  
  <pre><code>printf("%c", *( (char*)(argv[1] +1 ) );
  </code></pre>
  
  <p>Why is this happening? I kno that:</p>
  
  <pre><code>argv's type :=  char** argv
  and argv[1] == *(argv + 1)
  and argv[1]'s type should be char*
  </code></pre>
  
  <p>but apparently it is not, as I need to cast it? How is this possible? It is declared as char**, yet its members aren't char*s?</p>