Chaîne de pointeur et tableau de caractères en c

Je viens de commencer à apprendre le C et le trouvé un peu de confusion sur le pointeur de la chaîne et de la chaîne(tableau de char). Quelqu'un peut-il m'aider à effacer de ma tête, un peu?

//source code
char name[10] = "Apple";
char *name2 = "Orange";

printf("the address of name: %p\n", name);
printf("the address of the first letter of name: %p\n", &(*name));
printf("first letter of name using pointer way: %c\n", *name);
printf("first letter of name using array way: %c\n", name[0]);
printf("---------------------------------------------\n");
printf("the address of name2: %p\n", name2);
printf("the address of the first letter of name2: %p\n", &(*name2));
printf("first letter of name2 using pointer way: %c\n", *name2);
printf("first letter of name2 using array way: %c\n", name2[0]);

//output
the address of name: 0x7fff1ee0ad50
the address of the first letter of name: 0x7fff1ee0ad50
first letter of name using pointer way: A
first letter of name using array way: A
---------------------------------------------
the address of name2: 0x4007b8
the address of the first letter of name2: 0x4007b8
first letter of name2 using pointer way: O
first letter of name2 using array way: O

donc je suppose que le nom et le nom2 point à l'adresse de leur première lettre. alors ma confusion(voir le code ci-dessous)

//code
char *name3; //initialize a char pointer
name3 = "Apple"; //point to the first letter of "Apple", no compile error

char name4[10]; //reserve 10 space in the memory
name4 = "Apple"; //compile errorrrr!!!!!!!!!!

Je crée un pointeur de char appelé nom2 et nom2 pointeur vers la première lettre de "Apple" ce qui est bien, puis-je créer un autre tableau de char et d'allouer 10 de l'espace dans la mémoire. et puis essayez d'utiliser nom4 qui est une adresse de points à la première lettre de "Apple". En conséquence, j'ai une erreur de compilation.

Je suis tellement frustré par ce langage de programmation. parfois, ils fonctionne de la même manière. mais parfois, ils n'en ont pas. Quelqu'un peut-il expliquer la raison et si je veux vraiment créer une chaîne ou un tableau de caractères séparés lignes. comment je peux faire???

Merci beaucoup...

Avez-vous considéré que l'apprentissage de Python ou Java ou C# à la place? Ils sont beaucoup mieux les langues pour un débutant.
Absolument terrible commentaire. C'est à un niveau inférieur que l'une de ces langues fournir.
Éventuellement pertinentes: stackoverflow.com/questions/579734/...
Cette différence entre les tableaux et les pointeurs est quelque chose qui, en tant qu'assemblée programmeur (où ils sont tous juste d'adresses!) son trébuché moi dans le passé, trop. Mais je vais laisser l'un de la C-les experts de la langue de la réponse (qui sera probablement citer les spec pour vous.)
si parce que "Apple"(char *) n'est pas du même type que nom4(de type tableau) lors de l'affectation, pourquoi ils peuvent travailler de la même façon à obtenir une valeur spécifique?? comme *nom3 = nom3[0], *nom4 = nom4[0]

OriginalL'auteur eded | 2013-06-13