Récemment, je suis confronté à ce problème que je suis incapable de comprendre par moi-même.
Que signifient vraiment ces trois expressions ?
*ptr++
*++ptr
++*ptr
J'ai essayé Ritchie. Mais malheureusement, je n'ai pas pu suivre ce qu'il a dit à propos de ces 3 opérations.
Je sais qu'elles sont toutes effectuées pour incrémenter le pointeur/la valeur pointée. Je suppose aussi qu'il peut y avoir beaucoup de choses à propos de la précédence et de l'ordre d'évaluation. Comme l'un incrémente le pointeur d'abord puis récupère le contenu de ce pointeur, l'autre récupère simplement le contenu puis incrémente le pointeur, etc. Comme vous pouvez le voir, je n'ai pas une compréhension claire de leurs opérations réelles, que j'aimerais éclaircir dès que possible. Mais je suis vraiment perdu lorsque j'ai l'occasion de les appliquer dans des programmes. Par exemple :
int main()
{
char *p = "Hello";
while(*p++)
printf("%c",*p);
return 0;
}
me donne cette sortie :
ello
Mais je m'attendais à ce qu'il imprime Hello
. Une dernière demande - Veuillez me donner des exemples de comment chaque expression fonctionne dans un extrait de code donné. Car la plupart du temps, seule une simple théorie me dépasse.
6 votes
Vous avez manqué le quatrième :
(*ptr)++
(les parenthèses sont nécessaires pour lever l'ambiguïté avec*ptr++
)15 votes
Parce que vous avez incrémenté le pointeur avant de l'imprimer. Vous vouliez while(*p) et printf("%c", *p++);
0 votes
Super questions pour l'interview. Utilisation pratique limitée. J'aimerais que le langage C n'ait pas ces pointeurs :)
5 votes
@Himanshu Si cela embrouille votre candidat à l'entrevue, essayez ceci : Avoir un pointeur global,
char* p
, pointant vers une chaîne de caractères unique valide. Ensuite, avoir une fonctionfn(char ch)
qui imprime à la fois le paramètre ch et le caractère actuel pointé parp
. Maintenant, invoquezfn(*p++);
Q : Est-ce quefn
imprime le même caractère deux fois ? Vous seriez surpris du nombre de professeurs qui répondent mal à cette question.1 votes
Puisque p pointe vers une chaîne littérale, vous devriez écrire
const char* p = "Bonjour";
0 votes
@WhozCraig je suis l'interviewé :) et oui, c'est encore plus vrai
0 votes
Lire Pointeur
*++*ptr
utilisation aussi je pense vous aider davantage0 votes
Il est utilisé pour donner un accent français à votre exemple "Hello World"...