Comment puis-je passer au fonctionnement de mon tableau sans le deuxième élément du tableau?
par exemple, dans un tableau donné a , je veux passer a [0], a [2], ..., a [n-1] à la fonction f .
4 Réponses :
Si vous ne pouvez pas modifier la fonction appelée, et ne pouvez pas non plus modifier a :
b pour n - 1 éléments a [0] dans b[0ITED a [2] vers a [n-1] dans b [1] vers b [n -2] en utilisant memcpy par exemple. Si vous pouvez modifier un , la solution d'Axifive est plus efficace.
Vous pouvez permuter a [0] et a [1] puis passer le tableau à partir du deuxième élément: (a + 1) code >
a + 1, pas * (a + 1) qui équivaut à a [1]
Tout cela est très bien mais vous pouvez toujours accéder à l'autre élément par l'arithmétique du pointeur.
@jaudo, merci!
@Bathsheba Oui mais faut-il s'assurer que vous ne pouvez pas atteindre les autres éléments avec l'arithmétique du pointeur? a [-1] serait le deuxième élément initial, mais pourquoi une fonction accèderait-elle à l'index -1 ? Si vous copiez le tableau, le a [-1] entraînerait de toute façon un comportement indéfini.
@Osiris: Je sais pas. C'est juste que vous ne pouvez pas interdire à une fonction d'accéder au deuxième élément (en pensant ici en termes de "sécurité"), vous pouvez donc aussi bien transmettre la chose.
J'aime cette solution. Permutez un [0] et un [1], appelez la fonction avec & a [1], puis échangez-les à nouveau. Simple et efficace.
Je l'aime beaucoup aussi: il se généralise facilement à manquer n'importe quel élément.
Vous pouvez passer la valeur du premier élément et l'adresse du troisième élément comme deux paramètres, par exemple. Mais je pense que passer tout le tableau et ne pas utiliser le deuxième élément de la fonction est la solution la plus claire
Une façon serait d'appeler la fonction foo avec
foo(a[0], a + 2)
en supposant que a a au moins 1 élément. Personnellement, je transmettrais tout le lot et ignorais le deuxième élément de la fonction, en particulier si foo est autorisé à modifier le premier élément, auquel cas mon idée ne fonctionnera pas. Ma suggestion fera également des ravages avec l'indexation des tableaux, et, techniquement, vous pouvez toujours atteindre l'élément interdit avec l'arithmétique du pointeur.
En raison de cette capacité à atteindre l'élément par l'arithmétique du pointeur, un moyen d'éviter cela est copiez l'élément array sans , appelez la fonction, puis réécrivez les modifications apportées au tableau d'origine dans l'appelant.
vous pouvez faire une copie sans le 2ème élément
Vous pouvez créer un nouveau tableau et le transmettre, ou vous transmettre une variable supplémentaire qui indique quel élément est exclu. Si c'est à chaque fois le deuxième élément, vous pouvez l'intégrer directement dans votre code.
Inversé le -1 apparemment obligatoire sur la question!
Problème X-Y possible. Pourquoi voulez-vous passer un tableau sans le deuxième élément?
C ne passe pas du tout les tableaux par les fonctions. Seule une adresse est transmise. Fournir plus de détails aiderait.
@Mathing, si vous avez reçu une réponse complète, pouvez-vous la choisir comme solution? Ou écrivez un commentaire si les réponses ne vous conviennent pas.