2010-12-11 3 views
1

J'essaie de passer un pointeur de tableau à une méthode d'une classe, afin que la méthode puisse fonctionner sur le tableau.Comment passer un pointeur sur une fonction

Cependant quand je le passe, l'adresse semble changer.

Les pointeurs sont des variables membres.

En fait, je fais ceci:

unsigned char array[1000]; 
unsigned char * pointer = array; 
printf("p%", &pointer); 

setup(pointer); 

void setup(unsigned char* pointer){ 
    unsigned char * p = pointer; 
    printf("p%", &p); 
} 
+0

Vous devriez avoir '% p', pas' 'p% dans vos chaînes de format' printf'. –

+0

Merci à tous pour les réponses, je pense que je devrais pouvoir aller au fond des choses! –

+0

Juste pour référence, je n'essaie pas de déréférencer les pointeurs ici. Je cherche à faire en sorte que les adresses imprimées soient les mêmes, donc je sais que les deux affichent au bon endroit. –

Répondre

3

&pointer trouve l'adresse du pointeur, pas l'adresse du tableau. Vous voulez juste printf("%p", pointer);.

+1

Comment tout le monde a raté p%? Oeil méfiant, Oli :) –

+0

Parce que nos cerveaux lire un mot à la fois: http://www.aarons-jokes.com/joke-5195.shtml –

1

Vous imprimez l'adresse du char * p nouvellement attribué, non?

3

Vous imprimez l'adresse de la variable de pointeur. Dans le premier cas, il s'agit de l'adresse de pointer en tant que variable locale, et dans la seconde, il s'agit de l'adresse de pointer en tant qu'argument de fonction. Logiquement, ils ont des adresses différentes, bien que leur valeur soit la même, qui est l'adresse de array. Vous devez supprimer le & de votre printfs.

0

Vous créez une nouvelle variable, puis vous obtenez son adresse.

Vous voulez l'adresse de l'original pointer dans les arguments.

1
unsigned char array[1000]; 
Unsigned char * pointer = array; 
printf("p%", &pointer); 

Vous imprimez l'adresse de la variable 'pointeur'.

Setup(pointer); 

Vous passez la variable 'pointeur' par valeur à 'Setup'.

Void setup(unsigned char* pointer){ 

Vous avez accepté une variable par valeur appelée « pointeur » de sorte qu'il a été créé pour vous et initialisé avec la valeur la fonction a été appelée avec.

Unsigned char * p = pointer; 

Vous avez créé une autre variable appelée « p » qui est initialisé avec la même valeur contenue dans « pointeur ».

printf("p%", &p); 

Vous imprimez l'adresse de cette nouvelle variable. Il est situé dans un endroit différent en mémoire, bien sûr, car ce n'est pas la même variable que vous avez d'abord imprimée.

} 

cet article S'il vous plaît examiner: http://crazyeddiecpp.blogspot.com/2010/12/pet-peeve.html

1
unsigned char * pointer = array; 
printf("%p", &pointer); 

Vous n'êtes pas imprimer l'adresse de array ici; vous imprimez l'adresse de pointer. Les contenu de pointer représentent la adresse de array, donc je pense que vous besoin printf("%p", pointer); ici.

0

Il y a beaucoup de bonnes réponses ici, mais aucune qui illustre vraiment le concept crucial, à mon avis, c'est que les variables sont généralement transmises par valeur en C++ sauf indication contraire.

Dans votre fonction "setup", vous demandez réellement l'adresse du pointeur, pas l'adresse du tableau (qui est ce que le pointeur contient.) Comme ce pointeur a été passé à votre fonction par valeur, il est une copie de votre pointeur d'origine. C'est pourquoi il a une adresse différente.

0

pointer et p sont des variables séparées et auront donc des adresses différentes, en dépit du fait qu'elles pointent vers le même endroit. Peut-être que vous vouliez utiliser le dereference operator * plutôt que le address operator &.

Si vous voulez vérifier qu'ils pointent tous les deux vers la même adresse mémoire, vous devez sortir les pointeurs eux-mêmes plutôt que les adresses de ces pointeurs.

E.g.

printf("%p", pointer); 
0
setup(&pointer);//pass with its address 

void setup(unsigned char** pointer){// make one for address, one for array 
    ... 
} 
Questions connexes