Compile følgende kode. Her kan du se, hvordan du udskriver adressen på en pointer, adressen pointeren peger på og hvad pointeren peger på. Problemet optræder når man forsøger at udskrive adressen en char pointer peger på. Jeg mener det er fordi, at cout operatoren er overloaded til at udskrive alle tegn indtil nultermineringen, når man forsøger at udskrive et char string.
#include <iostream> #include <cstdio> using namespace std;
void main() { int test[] = {1,2,3}; int *p = test;
cout << test << endl; //adressen paa dit array cout << p << endl; //adressen pointeren peger på cout << &p << endl; //pointerens adresse
Om der findes en nemmere metode har jeg ikke undersøgt eftersom jeg aldrig har haft behov for det, men det kan en af eksperterne forhåbentligt svare på. Hvad angår god programmeringsskik eller rettere sagt iostream kontra cstdio, så fandt jeg følgende link på google.
Ja sagtens for pointeren har du sat til at pege på char stringen, så derfor vil dit eget eksempel også virke.
Når du erklærer en pointer, så bliver der allokeret plads i hukommelsen til pointeren, ligesom der gør når du erklærer en variabel. Derfor vil pointeren have sin egen adresse i hukommelsen. Adressen på dit array vil altid være adressen på det første element i arrayet. Hver plads/element i dit array bliver allokeret i en plads for sig selv i hukommelsen. Derfor sætter man pointeren til at pege på den første plads i arrayet, så man kan travesere ned gennem alt indholdet af arrayet.
Jeg var ikke klar over at stream<<pointer var overloadet.
Den virker dog lidt compiler specific.
VC++ 9 udskriver:
0x00012345
GCC 4.2 MinGW udskriver:
0x0x12345
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.