7
votes

c pointeurs et tableau

ie 
*p  b  a
1  2  1
2  3  2
3  4  3
4  5  4
5  6  5

3 commentaires

Vous avez mal classé vos colonnes: il devrait être * p b a , pas a b * p .


Oui j'ai fait mon mal. Fixé


Pour des raisons de résistance au changement, mieux do int b [taille de taille (a) / sizeof (A [0])] = {... et remplacez les valeurs 5 au même terme. De cette façon, vous pouvez modifier le tableau A et tout ira bien.


4 Réponses :


9
votes

Vous obtenez comportement indéfini . À la fin de la première boucle p points sur "un après la fin" de B . Sans le réinitialiser, vous le désirez alors et continuez à l'incrémenter, ce qui cause des comportement indéfini .

It peut être que sur votre implémentation, le tableau A est stocké immédiatement après le tableau B et que p a commencé à pointer dans le tableau a . Ce serait un potentiel "non défini" Bahaviour.


3 commentaires

Donc, fondamentalement, cela peut être n'importe quoi, juste dans ce cas, il semble indiquer la prochaine adresse de la mémoire dans ce cas qu'il pointe sur l'élément de départ de la matrice A? Corrigez-moi si je me trompe. Merci


exactement. ça peut être n'importe quoi. Le meilleur cas est qu'il se bloque donc vous savez que quelque chose ne va pas tôt.


@ user2135885: Pour moi, cela ressemble à une explication raisonnable, bien qu'il soit possible qu'il y ait une raison plus obscure de la coïncidence que vous voyez.



-2
votes

Vous ne devriez pas faire une boucle séparée pour l'impression et l'incrémentation des valeurs de la matrice. Faites à la fois la même boucle et procédez comme suit pour obtenir votre sortie :) #include #include xxx


0 commentaires

1
votes

après le premier pour {}, P pointe à B [5], mais la taille de B est 5, la valeur B [5] est donc inconnue, la valeur Printf * p est la même valeur que A [I], le La raison peut être en mémoire B [5] est un [0].


0 commentaires

1
votes

Je pense que ce que vous devez faire est d'ajouter un p = p - 5; xxx


1 commentaires

Mieux: p = b à nouveau, car le 5 pourrait changer.