webentwicklung-frage-antwort-db.com.de

Druckwert und Adresse des Zeigers in Funktion definiert?

Ich denke, das ist eine sehr einfache Sache, die man schreiben kann, aber ich habe Probleme mit der Syntax in C, ich habe gerade in C++ programmiert.

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %x\n", &iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){

void pointerFuncA(int* iptr); 

return 0;
}

Offensichtlich ist dieser Code nur ein Skelett, aber ich frage mich, wie ich die Kommunikation zwischen der Funktion und dem Hauptbetrieb herstellen kann und die Syntax für das Drucken der Adresse, auf die verwiesen wird, und von iptr selbst? Wie kann ich alle drei Werte an main senden, da die Funktion ungültig ist? 

Ich denke die Adresse ist so etwas wie:

printf("Address of iptr variable: %x\n", &iptr );

Ich weiß, es ist eine einfache Frage, aber alle Beispiele, die ich online gefunden habe, haben den Wert erhalten, aber sie wurden hauptsächlich als etwas definiert 

int iptr = 0;

Muß ich einen willkürlichen Wert schaffen? 

Vielen Dank!

7
austinscode

Lesen Sie die Kommentare

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %d\n", *iptr );

/*Print the address pointed to by iptr*/
printf("Value:  %p\n", iptr );

/*Print the address of iptr itself*/
printf("Value:  %p\n", &iptr );
}

int main(){
int i = 1234; //Create a variable to get the address of
int* foo = &i; //Get the address of the variable named i and pass it to the integer pointer named foo
pointerFuncA(foo); //Pass foo to the function. See I removed void here because we are not declaring a function, but calling it.

return 0;
}

Ausgabe:

Value:  1234
Value:  0xffe2ac6c
Value:  0xffe2ac44
12
Atahan Acar

Um auf den Wert zuzugreifen, auf den ein Zeiger zeigt, müssen Sie den Indirektionsoperator * verwenden.

Um den Zeiger selbst zu drucken, greifen Sie einfach ohne Operator auf die Zeigervariable zu.

Um die Adresse der Zeigervariable zu erhalten, verwenden Sie den Operator &.

void pointerFuncA(int* iptr){
    /*Print the value pointed to by iptr*/
    printf("Value:  %x\n", *iptr );

    /*Print the address pointed to by iptr*/
    printf("Address of value: %p\n", (void*)iptr);

    /*Print the address of iptr itself*/
    printf("Address of iptr: %p\n", (void*)&iptr);
}

Der %p-Formatoperator erfordert, dass das entsprechende Argument void* ist. Daher müssen die Zeiger auf diesen Typ umgewandelt werden.

6
Barmar

int* iptr ist bereits ein Zeiger, deshalb brauchen Sie beim Schreiben nicht den & vor ihm

printf("Address of iptr variable: %x\n", &iptr );

So drucken Sie einen Zeigerwert.

printf("Address of iptr variable: %p\n", (void*)iptr);

Sie haben auch den Funktionsprototyp für pointerFuncA() an der falschen Stelle, innerhalb von main(). Es sollte sich außerhalb einer Funktion befinden, bevor es aufgerufen wird.

1
Weather Vane
#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %p\n", (void*) iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){
int iptr = 0;
pointerFuncA( &iptr); 

return 0;
}

Ich denke, Sie betrachten so etwas, es ist nicht nötig, die Funktion in der Hauptsache neu zu definieren ....

1
Samer

Adresse sind einige Speicherwerte, die in hexadezimaler Schreibweise beginnend mit 0x geschrieben werden

/ Wert, auf den der Zeiger iptr zeigt /

printf("Value is: %i", *iptr);

Die Adresse, auf die der Zeiger zeigt, ist der Wert des iptr-Zeigers

/ die Adresse ausgeben, auf die das iptr zeigt /

 printf("Address is: %p", iprt);

/ die Adresse von iptr selbst ausdrucken /

 printf("Address of iptr: %p", &iptr )
1
mukki