printf () affiche un tableau entier

Supposons que j’ai le code suivant dans mon programme C :

#include  void PrintSomeMessage( char *p ); int main(int argc, char *argv[]) { char arr[10] = "hello"; PrintSomeMessage(&arr[0]); return 0; } void PrintSomeMessage(char *p) { printf("p: %s",p); } 

Pourquoi la sortie de ceci serait le mot entier “bonjour” au lieu d’un seul caractère “h”?

Je comprends cependant que si je mets un "%c" dans le formateur, il n’imprimera qu’une seule lettre. Mais toujours, l’adresse mémoire pour chaque lettre dans cette adresse est différente. S’il vous plaît, quelqu’un m’explique?

Mais toujours, l’adresse mémoire pour chaque lettre dans cette adresse est différente.

L’adresse mémoire est différente, mais comme son tableau de caractères, ils sont séquentiels Lorsque vous transmettez l’adresse du premier élément et que vous utilisez %s , printf imprimera tous les caractères à partir de l’adresse indiquée jusqu’à ce qu’il trouve '\0' .

En cas de tableaux , l’adresse de base (c’est-à-dire l’adresse du tableau) est l’adresse du premier élément du tableau. De plus, le nom du tableau agit comme un pointeur.

Considérez une rangée de maisons (chacune est un élément du tableau). Pour identifier la rangée, vous avez seulement besoin de l’adresse de la 1ère maison. Vous savez que chaque maison est suivie par la suivante (séquentielle). Obtenir l’adresse de la 1ère maison vous donnera également l’adresse de la rangée.

En cas de littéraux de chaîne (tableaux de caractères définis lors de la déclaration), ils sont automatiquement ajoutés par \0 .

printf imprime à l’aide du spécificateur de format et de l’adresse fournie. Depuis, vous utilisez %s il imprime à partir de la première adresse (en incrémentant le pointeur en utilisant l’arithmétique) jusqu’à ‘\ 0’