Juste entrer dans C ++. Je suis constamment jeté de la piste lorsque je vois le symbole de multiplier ( Par exemple:
Est-ce que cela jette d'autres personnes? Quel est le conseil pour avoir la tête autour de cela? P>
merci. p>
P.s. J'ai une autre question raisonnablement simple, qui n'a pas été répondue :( ici: * code>) étant utilisé pour désigner la déséroférance d'une variable p>
Unsigné Char * pixels = vidgrabber.getpixels (); code> p>
7 Réponses :
Vous pouvez distinguer l'opérateur de déséroférence de l'opérateur de multiplication par le fait que, généralement, un opérateur de multiplication n'a pas de nom de type à sa gauche. P>
C, et par héritage C ++, sont inondés avec les opérateurs et sont par nature sensible au contexte. Vous devrez vous habituer: p>
Si (De cela, vous pouvez voir que le Notez que * code> apparaît avant le nom d'une variable qui est déclarée em> strong> (ou défini), il est un modificateur em> strong> et rend cette variable un pointeur.
Si elle est un opérateur préfixe unaire em> strong> pour une variable qui fait partie d'une expression, il est déréférencement em> strong> (ou quoi que il a été surchargé pour).
Si elle est un binaire infix opérateur em> strong> pour deux variables qui font partie d'une expression, il est multiplication em> strong> (ou quoi que il a été surchargé pour). p>
* code> dans votre
unsigned char * pixel code> n'est pas un préfixe unaire déréférencement, mais de type modificateur em >.) p>
& code> à peu près ressemble
* code>, seule signification de c'est différent: il est une variable référence em>, est l'adresse de opérateur, ou le binaire ET. p>
+1 Pour une bonne réponse à la généralisation de cette question ainsi que cette question elle-même. J'aime particulièrement "Context-sensible"
+1 pour expliquer en détail les différents usages de *. Que diriez-vous d'expliquer davantage la différence entre & et *?
@Arun: Je ne suis pas sûr de ce que vous attendez.
Une recommandation Lorsque vous écrivez votre propre code consiste à "câliner" le * lorsque vous utilisez comme un pointeur / DEREF:
int y = x * 7;
La réponse est: Pratique. Chaque nouveau langage de programmation sera drôle dans une certaine mesure, d'autres plus drôles que d'autres. Apprenez à l'utiliser et il deviendra naturel. P>
Vous avez écrit sur Déroference en C Strong>.
Pouvez-vous dire le résultat de le regarder? ==> p> regarde p> rbo p> h3>
La signification de * v * * * m * * w code> est que le chat a été mis sur le clavier à nouveau. (Cela fait-il beaucoup quand il se bat pour attirer l'attention.)
Très bonne réponse! Un débutant qui est nouveau aux pointeurs en bénéficiera sûrement.
Sur le dessus de ma tête, je pense que "* * m" va produire quelque chose de wonky .. * m est 1, mais ** m le contenu de l'adresse mémoire 0x00000001 qui pourrait être quelque chose sur certaines plates-formes. Quoi qu'il en soit, quoi que ce soit, le résultat sera que Times 35.
Il ne peut toujours pas y avoir qu'un seul multiplicateur après une variable, toutes les autres sont des déréférences. Donc, il suffit de suivre les conseils pour garder les déréglexes fermer (= pas d'espace) à la variable, de sorte qu'il passe de int résultat = * v * ** m * * w code> et solution est assez simple.
@Sparr: Je pensais que tu as raison (et donc ma réponse ne va pas), mais le désassemblage vous prouve tort.
Pourquoi * m code> 1?
m code> est un tableau de tableaux, donc
* m code> est {1, 2} et
** m code> est 1. Le résultat est de 35.
De la même manière, les anglophones se content du fait que le même mot peut avoir des significations différentes selon le contexte. Une fois que vous êtes un peu immergé dans le contexte, il sera généralement évident que l'opérateur fait. P>
Une chose importante à noter environ C comparé à d'autres langues est que, dans la mesure où plusieurs déclarations sont combinées dans une seule déclaration, l'astérisque s'applique aux éléments individuels, et non à l'ensemble de l'ensemble. Par exemple:
volatile int *foo;
Votre exemple n'est pas la dermeférance - il suffit de faire partie du type de la variable
pixels code>. Mais je sais ce que tu veux dire.
Vous avez demandé à Quel est le conseil pour avoir la tête autour de cela? I> (Signification: Connaissance de pointeur ici) - Je dirais: En vous habituant b>. Comment les gens ont-ils la tête autour de produire des armes biologiques dans un laboratoire moderne? Même chose.
L'adoption d'un style cohérent est la clé. Par exemple, n'utilisez jamais d'espaces des deux côtés du
* code> sauf si vous l'utilisez comme opérateur de multiplication. Au lieu de
Char * Pixels Code>, choisissez
Char * pixels CODE> ou
Char * pixels CODE>.
Je trouve intéressant que la notation du pointeur C soit comparée à la production d'armes biologiques. Mais oui, ce que tout le monde a dit ici est correct. Le temps passé avec la langue vous rendra plus à l'aise avec sa syntaxe.
@ Cerc, ce n'est pas vraiment une comparaison (mais on pourrait ressembler à un) - c'est plutôt une opinion sur une classe de choses folles que les gens font tous les jours parce qu'ils pensent qu'ils n'ont d'autre choix. C'est appelé "aliénation" en termes philosophiques. (BTW. Je suis un programmeur C (plus tard C ++) depuis environ 20 ans)
Je suis tellement déformé par c que je suis confus quand je vois * être utilisé pour la multiplication :)