Q:

Behavior of int x[size]={0}

I am reading through K&R 2nd Edition and C by Dissection 4th Edition, and came to arrays where they both didn't explicitly state it but I remember from a class that we want to always initialize an array to zero to circumvent garbage being in the indices from previous memory allocations. 
I looked online and similar suggestions were made, but I saw an array declaration/initialization I hadn't seen before so I wanted to test it: int x[size]={0}; found here
I wrote a little c program to check things out, and I'm currently going down the rabbit hole it seems. 
Can someone please help explain the output?
gcc is compiling to c99, -std=c89 won't compile (because of // type comments so I know it isn't c89 (ansi) ), but looking at the gcc flags I cannot find STDC_VERSION flag to tell me which is; therefore, I've manually compiled like: gcc -Wall -std=c99 -o arrayTest arrayTest.c
The little program is: 
#include <stdio.h>

typedef int bool;
#define true 1
#define false 2
#define DEBUG_ true

int main()
{

    int x[5] ={0};// what does this do? Guess: Initialize x[0]-x[4] values of 0?
    int i=0;// for loop

    printf("Hello, World!\n");

    if(DEBUG_){
       printf("TESTING FOR NULLITY OF INDICES\n");
       for(i=0; i<5; i++){
          if(x[i]==NULL) printf("The Value at %d is NULL\n", i);
       }// If each is null, thats what int x[5]={0} decl/initl does..
        // Is 0 NULL in C Language (I wouldn't have thought so..)
    }

    printf("assigning 0 to all indices of the array..\n");
    for(i=0; i<5; i++){ x[i]=0; }
    // assigning the array to zeros..

    if(DEBUG_){
       printf("printing contents of array after filling with zero's\n");
       for(i=0; i<5; i++){ printf(x[i]+"\n"); }
       // hopefully print out 5 zeros..
       printf("SUSPECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN    ARRAY\n");
       for(i=0; i<5; i++){
          if(x[i]==NULL) printf("The Value at %d is NULL\n", i);
      }
    }

    printf("Filling the array, each index has value i*2\n");
   for(i=0; i<5; i++){ x[i]= i*2; }
   // initialize the array to i*2.
   // Expected Values 0, 2, 4, 6, 8

   for(i=0; i<5; i++){ printf(x[i]+"\n"); }
   // hopefully print out Expected Values

    return 0;
}

The output from the program:
-bash-4.3$
-bash-4.3$ arrayTest
Hello, World!
TESTING FOR NULLITY OF INDICES
The Value at 0 is NULL
The Value at 1 is NULL
The Value at 2 is NULL
The Value at 3 is NULL
The Value at 4 is NULL
assigning 0 to all indices of the array..
printing contents of array after filling with zero's

SUSPECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAY
The Value at 0 is NULL
The Value at 1 is NULL
The Value at 2 is NULL
The Value at 3 is NULL 
The Value at 4 is NULL
Filling the array, each index has value i*2

USPECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAYPECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAYCTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAY

From the looks of that last line there is a repeating sequence occurring:

USPECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAY 
PECTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAY 
CTING THAT ZERO FILL DIDN'T REPLACE NULL VALUES IN ARRAY

I am not sure why this is occurring.
Specifically can someone explain what the array declaration/initialization actually does, why assigning zeros to the array isn't working in this case, why trying to set each index to i*2 doesn't work, and what is going on with the print pattern at the end of the output?

A:

The printf() usage is wrong here. Change
printf(x[i]+"\n");

to
printf("%d\n", x[i]);

See the man page for details.
Also, regarding the initializaion, if you need any reference, see this.

