With pointers those examples would look a litte different: the array declarations would be replaced with "char *". The rest is the same.
char name0[6];
name0[0] = 'J';
name0[0] = 'a';
name0[0] = 's';
name0[0] = 'o';
name0[0] = 'n';
name0[0] = '\0'; // don't forget to terminate the string
// shows nicely that C strings are actually arrays:
char name1[] = { 'J', 'a', 's', 'o', 'n', '\0' };
char name2[6] = "Jason"; // you can specify the array length or
char name3[] = "Jason"; // leave it to the compiler
// leave it to the compiler to avoid memory leaks.
char name4[100] = "This is not 100 characters long: waste of memory";
// BTW: whenever you use string literals like these examples
// the strings will end up in non-writeable text segment