Passer par référence en C
Je suis en train d'utiliser passage par référence en C de manière à ce que la fonction peut modifier les valeurs des paramètres qui lui sont passés. C'est la signature de la fonction:
int locate(char *name, int &s, int &i)
Cependant lorsque j'essaie de compiler, j'obtiens cette erreur qui se réfère spécifiquement à la ligne ci-dessus:
erreur:‘;’,‘, ’ ou de ‘)’ avant
'&' token
Si je supprime le "& " le programme compile, mais il ne fonctionne pas correctement, évidemment. Quel est le problème ici? Comment puis-je faire appel par la référence au travail?
source d'informationauteur neuromancer
Vous devez vous connecter pour publier un commentaire.
C n'a pas de références. Vous avez besoin de passer un pointeur vers la variable que vous souhaitez modifier:
C n'a pas de référence à des variables mais vous pouvez envisager d'référence const pointeur vers les données de sorte ,
Faire const pointeur vers les données comme cela pour que le pointeur de cant point à d'autres données, mais les données se faire remarquer par elle peut être changée.
C
ne supporte pas le passage par référence. Vous aurez besoin de C++ pour faire de la manière dont elle est écrite, ou modifier danset de passer des pointeurs de la deuxième et de la troisième paramètre des variables.
Le plus tôt réponses semblent manquer de contexte, et de ne pas traiter de la propriété que C les pointeurs sont surchargés. Il est tout à fait juste de prétendre que C "passe par une référence." Un pointeur est une référence, aussi. Cependant, plus formellement, un C "de référence" est le mécanisme pour représenter un symbole de l'adresse de mémoire.
adresse.
La séparation de contexte est celui de la signature de la définition et de la signature de l'invocation.
Considérer les primitives
int a = 0x22e8;
et ailleurs, nous déclaronsint* b = &a;
(je vais prendre des fonctions dans une minute).Nous avons pu observer cela en mémoire (à supposer boutisme n'a pas d'importance pour cet exemple):
Il est facile de voir que l'on peut affecter un pointeur vers n'importe quelle adresse sans des astuces. Un pointeur est une variable, mais C nous permet de référencer l'adresse de pointage; nous pouvons "déréférencer le pointeur de la valeur de l'adresse au lieu de traiter le pointeur comme son pointee de la valeur sous-jacente au cours d'un contexte d'invocation:
while ( *b == a ) ...
. On pourrait aisément appelerb == &a
.Lors de l'application pour les appels de fonction, vous devez séparer le contexte de la fonction (signature) définition vs invocation afin de différencier les passer par référence.
Dans la définition d'une signature de fonction, nous n'allons pas dire que le compilateur qui adresse un argument est accessible à partir de — le moteur d'exécution ne sait même pas encore! C'est tout simplement absurde de définir
void bar(int &blah) {...}
. Au lieu de cela, nous utilisons le pointeur déréférencé de la syntaxe "quelle que soit l'argument est passé en sera chargé à l'adresse pointée" référence souhaitée valeur d'argument lors de l'exécution se produit. Donc C peut passer des arguments par référence.Les contextes à la fois la fonction de la signature des définitions et des appels de fonction modifier la façon dont le compilateur recherche pointeur de la surcharge vs de référence, et comment le runtime peut effectivement traiter.
Vous ne pouvez pas le faire en c. c n'a pas de référence, vous pouvez utiliser le pointeur de la place.
Si vous souhaitez utiliser le passage par référence méthode pour modifier un paramètre dans l'appel de fonction, toujours utiliser des pointeurs comme arguments formels de la fonction.
Donc au lieu d'utiliser ce
utilisation,
Lorsque vous appelez cette fonction, vous pouvez utiliser
.........
J'espère que tout serait clair maintenant,
Pour plus d'idée sur la transmission par valeur ou le passage par référence et lequel est le mieux, cette source est bon pour les débutants
http://www.learnc.net/call-by-reference.php
Avoir du plaisir.
(Je suis ont été à l'aide de C pour un moment, mais je suis encore nouveau pour quelques concepts en C. je suis en tentant d'y répondre au meilleur de ma connaissance, n'hésitez pas à me corriger Si je me trompe)
Quand vous dites passage par référence vous passer l'adresse, et ne vous serait d'utiliser des pointeurs pointant vers les adresses. Si vous avez besoin de passer les pointeurs pour votre prototype de fonction, mais ce que vous êtes en train de faire est de passer directement l'adresse.
Ce que votre fonction essaie de référence(à l'aide de &) le pointeur de la souris, mais vous n'avez jamais eu un pointeur sur paramètres " s " et " i " de référence.
La bonne façon de faire pour le prototype de fonction/définition est
et lorsque vous devez appeler cette fonction, vous pouvez utiliser la déclaration ci-dessous dans la principale ou la fonction d'appel