char *e;
while(*e!=0)
{
if(isalnum(*e))
printf("%c",*e);
e++;
}
But *e is a pointer, right ?
So address should be printed, right ?
3 Réponses :
mais * e est un pointeur droit? P>
non.
E code> est un pointeur.* E code> est le premierChar code> IT pointe sur. Lorsqu'il est utilisé dans une expression (plutôt qu'une déclaration de type) comme un opérateur unaire (un opérateur avec un opérande),* code> est le Opérateur indirect em> . P>Que fait une * variable! = 0 moyenne? p> blockQuote>
supposer que la boucle est réellement: p>
xxx pré> ... Cela signifie de garder une boucle pendant que le
Char code> queE code> points sur est! = 0 code>. Les chaînes C sont terminées avec un 0char code>,'\ 0' code> (mais généralement écrit comme simplement0 code>). P>
Je dois noter que la boucle de la question, en plus des typos de base comme
char code> au lieu dechar code> etpendant code> au lieu detandis que code> a la principale erreur logique qu'elle ne modifie jamais la valeur deE code> dans le corps de la boucle. Cela signifie que si elle boucle une fois, ça va boucler pour toujours; Il a besoin++ e; code> quelque part. (E code> n'est jamais initialisé.) Donc, par exemple, par exemple: p>xxx pré> ou, vraiment, c'est ce que
pour code> est Pour: p>xxx pré> blockQuote>
Il y a une ancienne règle C: la déclaration ressemble à utiliser em> strong>. Donc, si Le code fourni contient également UB car char * e code> est une déclaration de stockage pour le pointeur à un char code>, * e code> est utilisé, ..e. Accès à l'objet pointé par e code>. p>
E code> n'est pas initialisé. Résultat de la variable d'inspection qui n'a pas été initialisé n'est pas défini. La déséroférance de ce pointeur serait indéfinie aussi bien parce que par définition que le pointeur ne pointe rien, et n'est pas un pointeur nul. P>
pour commencer il y a des typos vous voulez dire p> de plus que le pointeur et enfin le pointeur dans la boucle n'est pas modifié. Un extrait de code valide peut ressembler à p> dans l'état de la boucle tandis que le pointeur E est comparé à zéro qui est en fait avec le null caractère de terminaison. Il serait donc préférable d'écrire p> chaque chaîne en C est inclut et se termine avec le caractère de terminaison zéro. Donc, dans la condition, il y a un chèque si c'est la fin de la chaîne. Sinon, entrez dans le corps de la boucle. P> Dans l'appel de la fonction Isalnum, vous devez lancer le caractère sur le type de type non signé comme fonction requis. P> ici est un programme de démonstration. p> La sortie du programme est p> qui est les caractères vides ne sont pas émis car ils ne sont pas caractères alphanumériques. p> p> E code> n'est pas initialisé . Il doit être initialisé par une chaîne. Par exemple p>
'\ 0' code> peut être sans doute plus correct, mais 0 code> est idiomatique.
@Tjcrowder, car les deux sont des valeurs identiques de type identique ( int code>) dans c Il y a un argument selon lequel 0 code> est aussi correct que \ 0 code> mais , contrairement à vous, je ne pense pas que 0 code> est plus idiomatique. Je veux définitivement voir char code> constantes dans le code qui effectue des travaux sur des caractères.
@Konradrudolph - Je reporte votre expérience presque certainement plus grande. J'ai toujours écrit '\ 0' code>. (Long de temps depuis que j'ai écrit c régulièrement.) Mais je ne l'ai presque jamais vu dans le code des autres. :-)
Ce code contient des erreurs de base de syntaxe. N'oubliez pas que c est sensible à la casse i>.
Référence obligatoire au Liste de livres . Essayer d'apprendre C, surtout si vous ne comprenez pas déjà les pointeurs, en regardant le code et que vous demandez beaucoup de questions, est susceptible d'être frustrant.