11
votes

Utilisations communes pour les pointeurs?

Je suis un étudiant de programmation avec deux classes en C #, mais je prends simplement ma première classe en C ++ et je suis donc exposé à des pointeurs.

Je sais comment ils travaillent et la bonne façon de les utiliser, mais je me demandais de certaines des manières d'utiliser des programmeurs professionnels dans leurs programmes.

Alors, comment utilisez-vous des pointeurs? Ou êtes-vous?

Cela m'aidera à comprendre certaines applications pratiques pour les pointeurs, donc merci!


1 commentaires

Regardez celui-ci pour voir pourquoi les pointeurs sont parfois utilisés pour les paramètres: Stackoverflow.com/questions/2139224/2139254#2139254


4 Réponses :


1
votes

Si vous avez un peu de temps sur vos mains pour lire un livre, je vous recommanderais de lire le langage de programmation C qui utilise lourde utilisation des pointeurs.

Un exemple simple de fonction standard: xxx


4 commentaires

Et pourquoi l'utilisation de toute personne qui en réelle C ++ code (sauf lors de l'écriture d'une classe de chaîne)?


Ils pourraient avoir besoin de calculer la longueur d'une chaîne.


Laissez-moi reformuler que: S'il vous plaît ne recommandez pas le langage de programmation C et de style C pour quelqu'un qui commence un cours C ++.


Bon point. Je le recommande si vous voulez vraiment comprendre comment utiliser des pointeurs cependant



6
votes

Pour les stateurs, vous les utilisez dans votre Structures de données , comme liste liée, etc. Analface Vous avez besoin de mémoire allouée de manière dynamique, c'est-à-dire que vous ne connaissez pas la taille de la compilée, vous utiliserez un pointeur .


0 commentaires

18
votes

Chaque fois que vous utiliseriez une référence en C #. Une "référence" est juste un pointeur avec des airbags de sécurité fantaisie autour de lui.

J'utilise des pointeurs une fois toutes les six lignes du code C ++ que j'écris. En haut de ma tête, ce sont les utilisations les plus courantes:

  • Lorsque j'ai besoin de créer de manière dynamique un objet dont la durée de vie dépasse la portée dans laquelle elle a été créée.
  • Quand j'ai besoin d'allouer un objet dont la taille est inconnue au moment de la compilation.
  • Quand j'ai besoin de transférer la propriété d'un objet d'une chose à une autre sans la copier (comme dans une liste liée / tas / autre de très grandes structures chères)
  • Lorsque je dois faire référence au même objet de deux endroits différents.
  • Quand j'ai besoin de trancher un tableau sans la copier.
  • Lorsque je dois écrire directement dans une région spécifique de la mémoire (car elle a mappé de mémoire IO).

4 commentaires

"Quand j'ai besoin de faire référence au même objet de deux endroits différents." Pour cela, une référence est souvent meilleure.


Vous ne pouvez pas réaffecter une référence. Je voulais dire des cas où j'ai des objets A, B, X et Y, tous dans différents domaines. X et y ont les deux besoin de faire référence à A. plus tard, sans créer de nouveaux x et y, je dois les faire référence à la fois à B. si x et y contient tous les deux un foo & a , alors je peux Le réinstallez-le à B. Je pourrais avoir une sorte de classe de poignée de fantaisie qui a une fonction .ReSeat (), mais en interne, cela utiliserait un pointeur de toute façon.


"Vous ne pouvez pas réaffirmer une référence." Bien sûr que vous ne pouvez pas. Mais ce n'est pas nécessaire chaque fois que vous devez vous référer au même objet de deux endroits différents. (Voir Paramètres de fonction, par exemple.)


Serait génial de voir un petit exemple pour chaque cas que vous référenciez, s'il vous plaît.



1
votes

Partie 1 de 2 Strong>

Les pointeurs sont souvent nécessaires pour interfacer avec C Bibliothèques lorsque des données doivent être transmises à une API existante. Ce mécanisme ne se limite pas aux systèmes "Legacy", les exemples modernes incluent OpenGL, DirectX et Win32. P>

ci-dessous est un exemple de OpenGL: GLVERTEXPointer (int, flotteur, int, flotteur *) prend un pointeur de flotteur comme premier argument. p> xxx pré>

au lieu d'utiliser une matrice définie statique, il serait correct de faire ce qui suit. : p> xxx pré>

ou si vous voulez utiliser std :: vecteur p>

class foo {
  ...
  public:
    static int s_callback0(void* obj){
      return (foo*)(obj)->callback0();
    } 
    int callback0(){
      ...
    }
    ...
};

class callbackAPI {
  public:
    int setCallback(int(*fn)(void*),void* context){
      m_fn(fn);
      m_context(context);
    }
    void run (){
      m_fn(m_context);
    }
  private:
    int(*m_fn)(void*);
    void *m_context;
};

main {
  foo f;
  callbackAPI cb;
  cb.setCallback(foo::s_callback0,f);
  cb.run();
}


0 commentaires