Avoir une fonction change la valeur qu'un pointeur représente en C
J'ai un main
fonction qui a un char, je tente de passer un pointeur vers cet char
dans une fonction et le modifier à partir d' A
à B
mais il ne semble tout simplement pas à le changer. L'exemple montré ici est juste de l'état actuel du code, j'ai essayé beaucoup de différentes variantes ainsi, il peut y avoir d'autres erreurs dans il de simplement clutching at straws.
int main()
{
char result = 'A';
setChar(&result);
printf("%C", result);
}
void setChar(char* charToChange)
{
charToChange = "B";
}
source d'informationauteur Nick
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez est
*charToChange = 'b';
. Le pointeurcharToChange
est une variable locale (paramètre) danssetChar
mais vous pouvez changer ce qu'il désigne à l'aide du préfixe*
opérateur et une affectation. Notez que*charToChange
est un personnage, trop, pas une chaîne de caractères.Vous avez à de déréférencement le pointeur passé à
setChar()
afin de modifier la valeur des points, pas le pointeur de l'argument lui-même.Vous devez également utiliser le caractère littéral
'B'
au lieu de la chaîne littérale"B"
(qui est un pointeur verschar
pas unchar
).lorsque vous appelez setChar fonction avec &résultat comme paramètre ,il passe l'Adresse de résultat, où elle est stockée.
de sorte qu'il sera affectée à char pointeur * charToChange
Maintenant, Lorsque vous essayez d'écrire charToChange = "B";
Donc, Tout en faisant Affectation des magasins
Mais Encore L'Adresse 0x00000010 vers Un
Sorte qu'il est Faux
Vous devez remplacer charToChange = "B"; à
De sorte que la Valeur à 0x00000100 Devient "B"
Rappelez-Vous Toujours
Vous souhaitez modifier la valeur le pointeur pointe verspas le pointeur lui-même.
Vous devez donc déréférencer le pointeur avec
*pointer
:Si vous ne le faites pas, il suffit de changer la valeur locale de
charToChange
.Vous avez besoin de déréférencement d'elle, et l'opérateur doit être un char plutôt qu'une chaîne de caractères, c'est à dire utiliser des apostrophes plutôt que de guillemets:
C copies des pointeurs qui sont passés dans des fonctions en tant que paramètres.
Donc, à l'intérieur de la fonction vous êtes la manipulation d'une copie du pointeur,
pas le pointeur lui-même. Lorsque la fonction se termine, le pointeur s'il
a été changé dans
sera de retour à sa valeur précédente et la copie sera détruit.
L'objet de la mémoire de l'emplacement du pointeur de points sont susceptibles d'être modifiés et
c'est toute l'idée derrière passer par référence.
Une erreur commune est d'essayer de nulle un pointeur à l'intérieur d'une fonction et
en découvrant qu'il n'est pas null lors de retour de la fonction. Sur certains systèmes, vous obtenez en retour le pointeur pointant vers d'ordures ou de mauvais emplacements de mémoire que le plantage de votre programme lorsque vous essayez de lire ou d'écrire dans la variable.
lors du retour de f maintenant s = ? (valeur précédente , NULL, ou la POUBELLE )
Cela se produit le plus souvent avec des variables transmises à des fonctions définies dans
les modules distincts qui prennent des valeurs par référence, ou à travers des contextes d'exécution (comme les fils ou de la mémoire partagée entre les processus).