Une introduction aux pointeurs pour les programmeurs

Que vous le réalisiez ou non, la grande majorité des programmes que vous avez utilisé de faire usage de pointeurs d`une certaine façon. Peut-être que vous avez connu une NullPointerException

à un moment donné. En tant que programmeur, le code que vous écrivez plus de pointeurs d`utilisation probables, même si vous ne les avez pas mis en œuvre vous-même.

Aujourd`hui, je vais vous montrer comment les pointeurs fonctionnent, vous pouvez consulter comment les tableaux et les listes de travail pour une amorce de programmation. Cet article sera plus théorique basée que d`habitude, mais le bâton avec elle, les pointeurs sont très complexes!Comment tableaux et listes en PythonComment tableaux et listes en PythonLes tableaux et les listes sont quelques-unes des structures de données les plus utiles dans la programmation - bien que peu de gens les utilisent à leur plein potentiel.Lire la suite

code de Compiling

Avant de creuser dans des pointeurs, vous devez comprendre comment le code est construit et exécuté - peut-être vous le savez déjà. Cette section aura des déclarations assez générales - les choses qui s`appliquent à la majorité des langues, mais pas nécessairement tous.

pointeurs

Prenons les choses au début. chaque ordinateur utilise binaire, une série de uns et de zéros qui composent la technologie moderne que nous connaissons. Il est extrêmement difficile de coder quoi que ce soit en binaire (les fichiers seraient très confus), car ce sont les premières instructions nécessaires à votre l`unité centrale de traitement ou CPU fonctionne. Ceci est connu comme Langage machine.Qu`est-ce que binaire? [Technologie Explained]Qu`est-ce que binaire? [Technologie Explained]Étant donné que binaire est donc absolument fondamental à l`existence d`ordinateurs, il semble étrange que nous ayons jamais abordé le sujet avant - si aujourd`hui j`avais pensé que je donnerais un bref aperçu de ce que binaire ...Lire la suite

L`étape suivante à partir du code machine est Assemblée. Ceci est un format lisible un peu humain. Bien qu`il soit encore complexe à programmer, il est possible. Assemblée se compose d`une série de commandes simples pour exécuter des tâches, et est connu comme niveau faible langage de programmation. Il est possible d`écrire des programmes complexes, mais il est difficile d`exprimer des concepts abstraits, et nécessite beaucoup de considération.

De nombreux jeux vidéo et des applications de haute performance ont une partie de la logique écrite dans l`assemblage, comme des augmentations réelles de vitesse peuvent être trouvés si vous savez ce que vous faites. Cependant, pour la grande majorité des projets de programmation, vous n`avez pas besoin de connaître toute assemblée du tout.

pointeurs

Video: FORMATION C

Donc, si le code de la machine est trop difficile à écrire, et le montage est trop difficile à programmer, qu`est-ce que vous écrivez du code avec? Voici où haut niveau langues entrent en jeu. langues de haut niveau font des programmes faciles à écrire. Vous pouvez programmer quelque chose qui ressemble à votre langue maternelle, et il est facile d`exprimer des algorithmes complexes. Vous avez peut-être entendu parler de nombreuses langues de haut niveau (et vous aurez certainement utilisé un programme écrit en eux):

  • DE BASE
  • C ++
  • Zézayer

Ces langues sont très vieux maintenant, et beaucoup ont été développés au début des années 1950! Presque toutes les langues de programmation moderne est un langage de haut niveau, y compris PHP et Python. Il y a plus de langues inventées chaque jour (bien qu`il y ait probablement assez maintenant), mais comment exactement votre code fonctionne toujours correctement si les ordinateurs ont besoin du code machine?

Voici où la compilation vient. Un compilateur est un programme qui convertit votre code de haut niveau en une forme qui peut être exécutée. Cela pourrait être une autre langue de haut niveau, mais il est généralement assemblée. Certaines langues (comme Python ou Java) convertir votre code dans une étape intermédiaire appelé bytecode. Il faudra compiler à nouveau à une date ultérieure, qui se fait généralement à la demande, par exemple lorsque le programme est exécuté. Ceci est connu comme juste à temps compilation, et il est très populaire.

Video: piscine C J10 8 - Pointeurs sur fonction (exemple) Thor

Gestion de la mémoire

Maintenant que vous savez comment fonctionnent les langages de programmation, regardons la gestion de la mémoire dans des langages de haut niveau. Pour ces exemples, je vais utiliser le code pseudo - code écrit dans aucune langue spécifique, mais utilisé pour montrer des concepts plutôt que la syntaxe exacte. Aujourd`hui, cela va ressembler à la plupart C ++ comme c`est la meilleure langue de haut niveau (à mon avis).

Pour cette section, il vous aidera si vous avez une compréhension comment fonctionne RAM.Un rapide & Guide Dirty to RAM: Ce que vous devez savoirUn rapide & Guide Dirty to RAM: Ce que vous devez savoirRAM est un élément essentiel de chaque ordinateur, mais il peut être source de confusion pour comprendre si vous n`êtes pas un gourou tech. Dans ce post, nous décomposons en termes faciles à comprendre.Lire la suite

La plupart des langues ont des variables - conteneurs qui stockent des données. Vous devez définir explicitement le type de données. Certaines langues dynamiquement tapées telles que gérer Python ou PHP pour vous, mais ils ont encore à le faire.

Disons que vous avez une variable:

int myNumber-

Ce code déclare une variable appelée mon numéro, et il donne un type de entier. Une fois compilé, l`ordinateur interprète cette commande comme:

« Trouver une mémoire vide, et réserver un espace assez grand pour stocker un entier »

Une fois exécuté cette commande, que peu de mémoire ne peut pas être utilisé par un autre programme. Il ne contient pas encore de données, mais il est réservé à votre variable myNumber.

Maintenant, attribuer une valeur à votre variable:

mon numéro = dix-

Pour effectuer cette tâche, votre ordinateur accède à son emplacement de mémoire réservée, et les changements ne importe quelle valeur y est stockée, à cette nouvelle valeur.

Maintenant, tout cela est bien beau, mais comment obtenir des emplacements de mémoire sans réserves? Si les programmes réservés toute la mémoire qu`ils aiment, la RAM remplirait immédiatement - qui ferait un très système lent.

pointeurs

Pour éviter ce problème potentiel, de nombreuses langues mettent en œuvre un Éboueur, utilisé pour détruire les variables (et donc libérer les emplacements de mémoire réservés) qui sont passés hors de portée.

Vous demandez peut-être ce que la portée est et pourquoi il est si important. Champ d`application définit les limites et la durée de vie de variables ou de toute mémoire utilisée par un programme. Une variable est « hors de portée » quand il ne peut plus être accessible par un code (qui est quand les étapes de collecteur d`ordures). Voici un exemple:

fonction mathématiques() {int firstNumber = 1-}int secondNumber = 2-impression(firstNumber + secondNumber)- // ne fonctionnera pas

Cet exemple ne compile pas. la variable firstNumber se situe dans la mathématiques fonction, de sorte que c`est est portée. Il ne peut pas être accessible depuis l`extérieur de la fonction dans laquelle elle a été déclarée. Ceci est un concept de programmation importante, et la compréhension, il est essentiel de travailler avec des pointeurs.

De cette façon, la mémoire de manipulation est appelé empiler. C`est la façon dont fonctionne la grande majorité des programmes. Vous ne devez pas comprendre les pointeurs de l`utiliser, et il est assez bien structuré. L`inconvénient de la pile est la vitesse. Comme l`ordinateur doit affecter la mémoire, de garder trace des variables, et exécutez la collecte des ordures, il y a une petite surcharge. Ceci est très bien pour les petits programmes, mais qu`en est-tâches de haute performance ou les données des applications lourdes?

Entrée: pointeurs.

pointeurs

Sur la surface, les pointeurs paraissent simples. Ils font référence (pointer vers) D`un emplacement en mémoire. Cela peut sembler différent à des variables « régulières » sur la pile, mais croyez-moi, il y a une énorme différence. Pointeurs sont stockés sur le tas. Ceci est à l`opposé de la pile - il est moins organisé, mais est beaucoup plus rapide.

Video: Cours 9 -- Les pointeurs

Regardons comment les variables sont affectées sur la pile:

int numberOne = 1-int numberTwo = numéro un-

Est simple syntax- La variable numéro deux contient le numéro un. Sa valeur est copiée à travers lors de la cession de la numéro un variable.

Si vous voulez obtenir le adresse mémoire d`une variable, au lieu de sa valeur, vous devez utiliser le signe esperluette (&). Ceci est appelé adresse de opérateur, et est une partie essentielle de votre boîte à outils de pointeur.

int numberOne = 1-int numberTwo = &numéro un-

Maintenant le numéro deux variable points à un emplacement de mémoire, plutôt que d`obtenir le numéro un copié à travers de son propre, nouvel emplacement mémoire. Si vous étiez à la sortie de cette variable, il ne serait pas le numéro un (même si stocké dans l`emplacement de mémoire). Il serait sortie de son emplacement de mémoire (probablement quelque chose comme 2167, même si elle varie en fonction du système, et de la RAM disponible). Pour accéder à la valeur stockée dans un pointeur, au lieu de l`emplacement de mémoire, vous devez déréférencer le pointeur. Ceci permet d`accéder directement à la valeur, ce qui serait le numéro un dans ce cas. Voici comment vous déréférencer un pointeur:

int numberTwo = *numéro un-

le opérateur de déréférencement est un astérisque (*).

Cela peut être un concept difficile à comprendre, alors nous allons passer à nouveau:

  • le adresse de opérateur (&) Stocke l`adresse de mémoire.
  • le opérateur de déréférencement (*) Accède à la valeur.

Les modifications de syntaxe légèrement lors de la déclaration des pointeurs:

int * MonPointeur-

Le type de données int ici fait référence au type de données le pointeur points , et non le type du pointeur lui-même.

Maintenant que vous savez ce que les pointeurs sont, vous pouvez faire quelques trucs vraiment bien avec eux! Lorsque la mémoire est utilisée, votre système d`exploitation démarre séquentiellement. Vous pouvez penser RAM comme des trous de pigeon. De nombreux trous pour stocker quelque chose, un seul peut être utilisé à la fois. La différence est ici, ces trous de pigeon sont tous comptés. Lors de l`attribution de mémoire, votre système d`exploitation démarre au numéro le plus bas, et travaille vers le haut. Il ne sera jamais sauter entre des nombres aléatoires.

pointeurs

Lorsque vous travaillez avec des pointeurs, si vous avez attribué un tableau, vous pouvez facilement accéder à l`élément suivant par un simple incrémenter le pointeur.

Voici où ça devient intéressant. Lorsque vous passez des valeurs à une fonction (en utilisant des variables stockées sur la pile), ces valeurs sont copiées dans votre fonction. Si ce sont des grandes variables, vous programme est de les stocker deux fois maintenant. Lorsque votre fonction est terminée, vous devrez peut-être un moyen de retourner ces valeurs. Les fonctions ne peuvent généralement retourner une chose - alors que si vous vouliez revenir deux, trois ou quatre choses?

pointeurs

Si vous passez un pointeur à votre fonction, seule l`adresse mémoire est copiée (qui est minuscule). Cela permet d`économiser votre CPU beaucoup de travail! Peut-être que vos points de pointeur à un énorme réseau d`image - non seulement votre travail de fonction sur les mêmes données stockées dans le même emplacement exact de la mémoire, mais une fois qu`il est fait, il n`y a pas besoin de retourner quoi que ce soit. Soigné!

Vous ne devez être très prudent cependant. Pointeurs peut encore sortir de la portée et être recueilli par le collecteur des ordures. Les valeurs stockées dans la mémoire, cependant, ne sont pas collectées. On appelle cela une fuite de mémoire. Vous ne pouvez plus accéder aux données (comme les pointeurs ont été détruits), mais il est toujours à l`aide de la mémoire. Ceci est une raison commune pour de nombreux programmes de tomber en panne, et il peut échouer spectaculairement s`il y a une grande quantité de données. La plupart du temps, votre système d`exploitation tueront votre programme si vous avez une fuite importante (en utilisant plus de RAM que le système a), mais ce n`est pas souhaitable.

pointeurs

pointeurs de débogage peuvent être un cauchemar, surtout si vous travaillez avec de grandes quantités de données, ou de travailler dans des boucles. Leurs inconvénients et difficultés à comprendre sont vraiment le compromis que vous gagnez en performance. Bien que rappelez-vous, ils ne sont pas toujours nécessaires.

C`est tout pour aujourd`hui. J`espère que vous avez appris quelque chose d`utile sur un sujet complexe. Bien sûr, nous n`avons pas couvert tout ce qu`il ya à savoir - c`est un sujet très complexe. Si vous êtes intéressés à en apprendre plus, je recommande fortement C ++ en 24 heures.

Si cela était un peu complexe, jetez un oeil à notre guide des langages de programmation les plus faciles.6 Easiest langages de programmation à l`apprentissage pour les débutants6 Easiest langages de programmation à l`apprentissage pour les débutantsApprendre à programmer est de trouver la bonne langue tout autant qu`il est sur le processus édificateur. Voici les six premiers langages de programmation les plus faciles pour les débutants.Lire la suite

Avez-vous appris comment fonctionnent les pointeurs aujourd`hui? Avez-vous des trucs et astuces que vous voulez partager avec d`autres programmeurs? Aller dans les commentaires et partagez vos impressions ci-dessous!

Articles connexes