Q:

How do I print out this 2D array?

Novice programmer here trying to print out a 2D array of asterisks. The output I'm trying to achieve is:
*******
 *******
  *******
   *******

That's 7 asterisks with a leading space increment by 1 every row with row 1 starting with 0 leading spaces and row 4 starting with 3 leading spaces.
Only the <stdio.h> library can be used and I'd like to keep using nested for loops. Here's my attempt:
#include <stdio.h>

int main(void)
{
  int i, j;
  char star[1] = {'*'};

  for(i = 0; i < 4; i++)
    {
      for(j = 0; j < 8; j++)
        {
          printf("%*c", i, star[0]);
        }
      printf("\n");
    }

  return 0;
}

Here's what I'm getting:
********
********
 * * * * * * * *
  *  *  *  *  *  *  *  *

I'd also like for this question to be an opportunity for me to learn good general programming practices and habits from this community so if you could critique my implementation, I'd greatly appreciate it.

A:

Firstly, this does not really have anything to do with multidemensional arrays. Secondly you are using the width format specifier in your printf call
printf("%*c", i, star[0]);

and setting that width to be i. Therefore each time you call 
printf("%*c", i, star[0]);

you are specifying the minimum width of the printed output to be i characters. As your output is a single * character this results in whitespace padding.
Thus in your final iteration of your i based loop (i = 3) you are causing the string
'  *'

to be printed each time, penultimate iteration (i = 2)
' *' 

and so on.
As you don't really need a char array of length 1, you could get your desired output with
for(i = 0; i < 4; i++)
{
  if (i > 0)
  {
    printf("%*c",i,' ');
  }
  for(j = 0; j < 8; j++)
  {
    printf("%c", '*');
  }
  printf("\n");
}

