Wert und Adresse des in Funktion definierten Zeigers drucken?

Lesezeit: 5 Minuten

Ich denke, das ist wirklich einfach zu programmieren, 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 der Hauptfunktion und die Syntax zum Drucken der Adresse, auf die verwiesen wird, und von iptr selbst erreichen kann. Da die Funktion ungültig ist, wie kann ich alle drei Werte an main senden?

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 nur den Wert, aber er wurde hauptsächlich als so etwas definiert

int iptr = 0;

Muss ich einen willkürlichen Wert erstellen?

Vielen Dank!

Benutzer-Avatar
Atahan Akar

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

  • @chux “%x” steht für hexadezimal, was zum Anzeigen der Zeiger verwendet werden kann. Der einzige Unterschied wird ein 0x am Anfang sein.

    – Atahan Acar

    2. Oktober 2015 um 19:38 Uhr


  • Die C-Spezifikation unterstützt nicht “”%x” … kann zum Anzeigen der Zeiger verwendet werden”. “o,u,x,X Das unsigned int Argument wird konvertiert …” und “Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert.”

    – chux – Wiedereinsetzung von Monica

    2. Oktober 2015 um 19:42 Uhr

  • Die Zeigergröße ist möglicherweise nicht mit der Int-Größe identisch.

    – Wetterfahne

    2. Oktober 2015 um 19:43 Uhr

  • “%p” steht für void *. Obwohl das üblich ist int * und void * die gleiche Größe und andere Attribute haben, die nicht von C angegeben werden. Für eine portable Antwort jeder Zeiger, der konvertiert werden kann void *wird zu gegossen void * zuerst wie in stackoverflow.com/a/32914514/2410359.

    – chux – Wiedereinsetzung von Monica

    2. Oktober 2015 um 19:49 Uhr

Benutzer-Avatar
Barmar

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.

Und um die Adresse der Zeigervariablen zu erhalten, verwenden Sie die & 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);
}

Das %p Der Formatoperator erfordert, dass das entsprechende Argument lautet void*daher ist es notwendig, die Zeiger auf diesen Typ umzuwandeln.

  • "%p" Streichhölzer void *. Die meisten Systeme verhalten sich wie erhofft mit "%p" und int *noch besser zu werfen void *. “p Das Argument soll ein Zeiger auf void sein.“ C11dr §7.21.6.1 8

    – chux – Wiedereinsetzung von Monica

    2. Oktober 2015 um 19:34 Uhr


  • @chux … und (void**) im dritten fall??

    – Wetterfahne

    2. Oktober 2015 um 19:35 Uhr


Benutzer-Avatar
mukki

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 selbst

/gibt die Adresse aus, auf die der iptr zeigt/

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

/Drucken Sie die Adresse von iptr selbst aus/

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

Benutzer-Avatar
Wetterfahne

int* iptr ist bereits ein Zeiger, also brauchst du den nicht & davor, wenn du schreibst

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

So drucken Sie einen Zeigerwert.

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

Außerdem haben Sie den Funktionsprototypen für pointerFuncA() am falschen Ort, drinnen sein main(). Sie sollte sich außerhalb jeder Funktion befinden, bevor sie aufgerufen wird.

Benutzer-Avatar
Gleicher

#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 sehen sich so etwas an, es besteht keine Notwendigkeit, die Funktion im Wesentlichen erneut neu zu definieren….

  • Okay, das hat also für den Wert funktioniert. Gibt es eine Möglichkeit, die Adresse, auf die verwiesen wird, und die Adresse von iptr zu drucken? Würde ich trotzdem einfach iptr eingeben, also keine Änderung an main?

    – Austincode

    2. Oktober 2015 um 19:28 Uhr

  • In diesem Code drucken Sie die Adresse von iptr, was meinen Sie mit Adresse, auf die verwiesen wird?

    – Gleicher

    2. Oktober 2015 um 19:30 Uhr

  • Okay, das hat also für den Wert funktioniert. Gibt es eine Möglichkeit, die Adresse, auf die verwiesen wird, und die Adresse von iptr zu drucken? Würde ich trotzdem einfach iptr eingeben, also keine Änderung an main?

    – Austincode

    2. Oktober 2015 um 19:28 Uhr

  • In diesem Code drucken Sie die Adresse von iptr, was meinen Sie mit Adresse, auf die verwiesen wird?

    – Gleicher

    2. Oktober 2015 um 19:30 Uhr

1180240cookie-checkWert und Adresse des in Funktion definierten Zeigers drucken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy