8
votes

C pointeurs alloués? Qu'est-ce que c'est ça?

J'ai le code ci-dessous.

      ____________
a -> |a|b|c|d|e|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
b -> |f|g|h|i|j|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
c -> |k|l|m|n|o|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ___________
d -> | | | | | | |
      ¨¨¨¨¨¨¨¨¨¨¨


8 commentaires

Il n'est pas clair de votre question Quelle a été votre réponse et ce qui n'allait pas avec ça. S'il vous plaît essayez de le reformuler pour le rendre plus compréhensible.


@karlphillip, C n'était pas rempli, il a été réaffecté.


Non, le contenu de C est pas copié sur d .


C'est une sorte de question truc et je dirais que vous l'avez passé. En pratique, lorsqu'un programme est en cours d'exécution, il n'y a pas de différence entre, par exemple, a et b . Peut-être que vous auriez pu dire que "Abcde" était sur la pile, mais c'est à peu près tout.


@David parlant strictement que nous copions le contenu. C'est juste que les pointeurs ont une adresse de contenu.


Lisez la section 6 de la Comp.lang.ca FAQ ; Une fois que vous êtes là, lisez aussi les autres sections :)


Venez y penser, les données pointées par d seront aléatoires, car il pointe de la mémoire ininitialisée.


@Pithikos no, d = c attribue le pointeur, le contenu n'est pas copié.


5 Réponses :


9
votes

C'est une réponse légèrement cryptique, mais je suppose que la plainte est que le tableau a ne point sur ces données; Il contient les données.

Cela pourrait être ce qui est nécessaire (sans la flèche de pointeur): xxx

Le nom d'un tableau peut être utilisé comme un pointeur, mais il a toujours un subtilement signification différente.


8 commentaires

Oui c'est ce que je pensais. Cependant, ce n'est pas un tableau essentiellement un pointeur au premier élément?


Le nom d'un tableau pointe vers le tout premier élément de ce tableau. C'est un pointeur dans ce sens.


On dirait qu'ils voulaient une image comme Ceci .


@Pithikos: Non, ce n'est pas. Le tableau A est juste la collection de 6 char s. Dans certaines circonstances a évaluera à un pointeur sur le premier caractère, mais ce n'est pas la même chose que dire que a est un pointeur (qui ce n'est pas).


@CAF "Collection of Char" est juste une notion abstraite. Je conviens qu'un tableau n'est pas la structure de données du pointeur. Cependant, il a une adresse en tant que contenu comme un pointeur. De cette façon, vous pouvez dire que c'est un pointeur. C'est juste que nous ne voulons pas dire le pointeur de structure de données dans ce cas.


@Pithikos: une collection de 6 caractères n'est plus abstrait qu'un seul char. Le contenu de la matrice est les 6 caractères qui le font. Ni plus ni moins.


L'explication réelle est ici Stackoverflow.com/questions / 1335786 / ... un point toujours sur les données. Les données sont simplement allouées sur la pile et copiées.


@Pithikos Pourquoi posez-vous la question ici si vous semblez déjà connaître toutes les réponses?



7
votes

Je les dessinerais comme ceci: xxx

remarque comment le A est inférieur à l'ensemble de la matrice, pas à côté d'une flèche. Il s'agit de souligner que A est un ensemble complet contenant la chaîne elle-même, pas seulement un pointeur. Cela montre que vous réalisez la différence entre un tableau et un pointeur .


3 commentaires

@Andrey: Non, ce n'est pas. Il y a une différence distincte entre un tableau et un pointeur. Bien que les identifiants de réseau se soient décomposés à un pointeur dans certains contextes, cela ne les fait pas des pointeurs. Essayez Tailleof (a) et Tailleof (B) et voir la différence pour vous-même.


Oui, tu as raison à ce stade. Mais en fait, cela n'a pas vraiment d'importance ici, je pense.


Vous avez d pointant vers 7 octets de déchets; ça ne devrait être que 6. :)



1
votes

Le contenu de la mémoire pointant par d n'est pas déterminé réellement. Il doit contenir des ordures qui provient de masloc () sur C


0 commentaires

1
votes

J'essaierais même de distinguer l'endroit où les données sont pointées sur des vies. XXX


0 commentaires

1
votes

Je pense que vous avez à peu près raison: xxx

sorties: xxx

note : Même si Strlen () recherche le caractère NULL pour pouvoir itération sur un tableau de cordes et de caractères de comptage, l'OCOUNCE de null lui-même n'est pas ajouté à la somme finale, c'est pourquoi il rapporte 5 caractères au lieu de 6.

Quant à votre réponse non acceptée, il y a probablement une autre forme de représentation que votre professeur s'attendait à ce que votre professeur s'attendait à Vous devez faire pour le tableau A , vous êtes peut-être intéressé à parler à vos collègues, mais je ne pense pas être juste d'affirmer que vous avez donné une mauvaise réponse.


0 commentaires