2010-12-11 9 views
1

Ich versuche, einen Array-Zeiger auf eine Methode einer Klasse zu übergeben, so dass die Methode für das Array arbeiten kann.Wie übergebe ich einen Zeiger auf eine Funktion

Allerdings, wenn ich es passiere, scheint sich die Adresse zu ändern.

Die Zeiger sind Membervariablen.

Im Grunde mache ich das:

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

Sie sollten '% P' haben, nicht' p% 'im' printf' Format-Strings. –

+0

Danke an alle für die Antworten, ich denke, ich sollte in der Lage sein, dem auf den Grund zu gehen! –

+0

Nur als Referenz, ich versuche nicht, die Zeiger hier zu dereferenzieren. Ich versuche, beide Adressausdrucke gleich zu lesen, also weiß ich, dass beide an der richtigen Stelle aussehen. –

Antwort

3

&pointer findet die Adresse des Zeigers, nicht die Adresse des Arrays. Sie wollen nur printf("%p", pointer);.

+1

Wie kommt es, dass alle p% vermisst haben? Vorsichtiges Auge, Oli :) –

+0

Weil unsere Gehirne ein Wort nach dem anderen lesen: http://www.aarons-jokes.com/joke-5195.shtml –

1

Sie drucken die Adresse des neu zugewiesenen char * p, sind Sie nicht?

3

Sie drucken die Adresse der Zeigervariablen. Im ersten Fall ist es die Adresse pointer als lokale Variable, und im zweiten Fall ist es die Adresse pointer als Funktionsargument. Logischerweise haben sie unterschiedliche Adressen, obwohl ihr Wert derselbe ist, der die Adresse array ist. Sie müssen die & aus Ihrem printfs entfernen.

0

Sie erstellen eine neue Variable und erhalten dann ihre Adresse.

Sie möchten die Adresse des ursprünglichen pointer in den Argumenten.

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

Sie drucken die Adresse der Variablen 'Zeiger'.

Sie übergeben die Variable 'Zeiger' nach Wert auf 'Setup'.

Void setup(unsigned char* pointer){ 

Sie haben eine Variable durch einen Wert namens ‚Zeiger‘ akzeptiert, so dass es die Funktion aufgerufen wurde mit dem Wert für Sie und initialisiert erstellt worden ist.

Unsigned char * p = pointer; 

Sie haben noch eine weitere Variable erstellt ‚p‘ genannt, die mit dem gleichen Wert gehalten in ‚Zeiger‘ initialisiert wird.

printf("p%", &p); 

Sie drucken die Adresse dieser neuen Variablen aus. Es befindet sich natürlich an einem anderen Ort in der Erinnerung, weil es nicht die gleiche Variable ist, die Sie zuerst gedruckt haben.

} 

Bitte lesen Sie diesen Artikel: http://crazyeddiecpp.blogspot.com/2010/12/pet-peeve.html

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

Sie sind nicht die Adresse array hier Druck; Sie drucken die Adresse pointer. Der Inhalt von pointer stellt die Adresse von array, so dass ich glaube, Sie Notwendigkeit printf("%p", pointer); hier.

0

Es gibt viele gute Antworten hier, aber keine, die wirklich das entscheidende Konzept illustrieren, das ist meiner Meinung nach, dass Variablen in C++ in der Regel Wert übergeben werden, wenn nicht anders angegeben.

In Ihrer Funktion "setup" fragen Sie eigentlich nach der Adresse des Zeigers, nicht nach der Adresse des Arrays (was der Zeiger enthält.) Da dieser Zeiger per Wert an Ihre Funktion übergeben wurde ist eine Kopie Ihres ursprünglichen Zeigers. Deshalb hat es eine andere Adresse.

0

pointer und p sind separate Variablen und daher unterschiedliche Adressen, obwohl sie auf den gleichen Ort zeigen. Vielleicht wollten Sie die dereference operator * anstelle der address operator & verwenden.

Wenn Sie überprüfen möchten, ob beide auf die gleiche Speicheradresse verweisen, sollten Sie die Zeiger selbst ausgeben und nicht die Adressen dieser Zeiger.

z.

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

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