title: Why is constant initialization need for static char* but not static char**
body: <p>Can someone please explain why this code...</p>
  
  <pre><code>// main.c
  
  #include &lt;stddef.h&gt;
  
  static const int    g_a   = 1;
  static const char*  g_b   = "hello";
  static const char*  g_c[] = { "a",    "b",    NULL };
  
  typedef struct Foo
  {
    int           a;
    const char*   b;
    const char**  c;
  } Foo;
  
  static Foo f[] =
  {
    { g_a,
      g_b,
      g_c }
  };
  
  int main( int argc, char* argv[] )
  {
    return 0;
  }
  </code></pre>
  
  <p>...produces this error:</p>
  
  <pre><code>&gt; gcc --version &amp;&amp; gcc -g main.c 
  gcc (GCC) 8.2.1 20181215 (Red Hat 8.2.1-6)
  Copyright (C) 2018 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  main.c:19:5: error: initializer element is not constant
       g_b,
       ^~~
  main.c:19:5: note: (near initialization for 'f[0].b')
  </code></pre>
  
  <p>I understand that the compiler is asking for a <em>constant</em> to initialize <code>f[0].b</code>, so the following initialization is a solution to the compile error:</p>
  
  <pre><code>static Foo f[] = { { g_a, "hello", g_c } };
  </code></pre>
  
  <p>But <strong>why does the compiler not issue a similar "constant required" error for the initialization of <code>f[0].c</code>?</strong> (Or, for that matter, <code>f[0].a</code>?) <strong>Why is this only an issue for <code>f[0].b</code>?</strong></p>