À l'aide de pointeurs, je peux accéder au caractère réel («i» dans ElGenerico) que je veux imprimer. Mais un caractère étrange est imprimé à l'écran, plutôt que mon caractère souhaité.
#include<stdio.h>
int main()
{
char *name[]={"Sami","Kevin","ElGenerico"};
printf("%c",(*(name+2)+7));
return 0;
}
Avec mon utilisation du spécificateur de sortie % s , la sortie de ce code est "ico".
Mais je veux imprimer uniquement le caractère «i». J'ai donc essayé d'utiliser % c , au lieu de % s . Ça ne marche pas. Au lieu de cela, une double flèche est imprimée.
Quelqu'un peut-il me dire où je vais mal?
3 Réponses :
Vous pointez vers la mauvaise adresse. Utilisez plutôt ceci:
*(name[2] + 7)
Puisque vous faites référence au troisième élément du tableau name , vous pouvez utiliser
name[2] + 7
Ensuite, vous vouliez mettre le 7ème élément du mot ElGenerico , donc nous devons ajouter 7 à l'adresse:
name[2]
Après nous obtenir l'adresse correcte, puis nous imprimons la valeur de cette adresse, et nous utilisons le signe * :
printf("%c",(*(name[2]+7)));
printf("%c",*(*(name+2)+7));
I used this, and it's solved, thanks for the help @David and @rcs...
C'est pourquoi nous n'écrivons pas un tel code trash mais plutôt name [2] [7] , qui est équivalent à 100%.
Je recommande d'utiliser la notation entre crochets pour une meilleure lisibilité.
Au départ, vous aviez ceci:
#include <stdio.h>
int main()
{
char* name[] = {"Sami", "Kevin", "ElGenerico"};
printf("%c", name[2][7]);
return 0;
}
Vous auriez encore besoin de déréférencer avec * pour obtenir le résultat souhaité. Cela vous donnerait ceci:
printf("%c", name[2][7]);
Cependant, cela reste un peu déroutant et pas très lisible. Vous pouvez le rendre beaucoup plus propre en utilisant la notation entre crochets, comme ceci:
printf("%c",*(*(name+2)+7));
Maintenant, il y a beaucoup moins de place pour l'erreur et vous obtenez toujours le résultat attendu.
Votre code final ressemblerait à ceci:
printf("%c",(*(name+2)+7));
printf ("% c", * (* (nom + 2) +7))(il vous manque le premier'*') Mieux vaut utiliser le nom[2] [7]Merci Monsieur, j'ai compris maintenant
Monsieur, pourquoi diriez-vous que le nom [2] [7] est le meilleur choix?
Elle est plus lisible que la notation par pointeur.
* (* (nom + 2) + 7)est beaucoup plus compliqué quenom [2] [7], bien que les deux soient entièrement équivalents.Ce n'est pas parce que la langue nous permet d'utiliser quelque chose que nous devrions le faire.
nom [2] [7]= lisible.* (* (nom + 2) + 7)= illisible.7 [2 [name]]= illisible.nom ?? (2 ??) ?? (7 ??)= illisible.7<:2<:name:>:>= illisible. Il existe d'innombrables façons d'écrire des C. extrêmement moche mais valide. Cela ne veut pas dire que nous devrions utiliser ces méthodes.@Lundin et user3121023 SIr, où pouvons-nous apprendre des syntaxes comme celles-ci? Je ne les ai jamais rencontrés et j'adore ça!