Duplicate possible:
Char d'allocation de mémoire * et char []
Quelqu'un peut-il m'expliquer quelle est la différence entre ces lignes de code
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
Dans quel cas devrais-je utiliser chacun des éléments ci-dessus?
Ce lien devrait satisfaire votre curiosité.
Fondamentalement (en oubliant votre troisième exemple qui est mauvais), la différence entre 1 et 2 est que 1 alloue de l'espace pour un pointeur sur le tableau.
Mais dans le code, vous pouvez les manipuler comme des pointeurs de la même manière - seule chose, vous ne pouvez pas réaffecter la seconde.
Les chaînes en C sont représentées sous forme de tableaux de caractères.
char *p = "String";
Vous déclarez un pointeur qui pointe vers une chaîne stockée quelque part dans votre programme (modifier cette chaîne est un comportement non défini) conformément au langage de programmation C 2 éd.
char p2[] = "String";
Vous déclarez un tableau de caractères initialisé avec la chaîne "String" laissant au compilateur le travail pour compter la taille du tableau.
char p3[5] = "String";
Vous déclarez un tableau de taille 5 et l'initialisez avec "String". Ceci est une erreur car "String" ne rentre pas dans 5 éléments.
char p3[7] = "String";
est la déclaration correcte ('\ 0' est le caractère final dans les chaînes c).
Vous ne devriez pas utiliser le troisième parce que c'est faux. "String" prend 7 octets, pas 5.
Le premier est un pointeur (peut être réaffecté à une adresse différente), les deux autres sont déclarés en tant que tableaux et ne peuvent pas être réaffectés à des emplacements mémoire différents (mais leur contenu peut changer, utilisez const
pour éviter cela).
char *p = "String"; means pointer to a string type variable.
char p3[5] = "String"
; signifie que vous pré-définissez la taille du tableau pour qu'il ne soit pas composé de plus de 5 éléments. Notez que, pour les chaînes, la valeur null "\ 0" est également considérée comme un élément. Par conséquent, cette instruction générera une erreur, car le nombre d'éléments est égal à 7.
char p3[7]= "String";