Avatar billede d34c0n Praktikant
28. juni 2006 - 04:21 Der er 10 kommentarer og
1 løsning

Pointer til pointer

jeg sad og legede lidt med pointers og prøvede nogen ting og sådan. kan nogen fortælle mig hvorfor følgende kode crasher:

#include "stdafx.h"

#define NUMBER 100

int main(int argc, char* argv[])
{
    int    First  = (int  )NUMBER;
    int*  Second = (int* )NUMBER;
    int**  Third  = (int**)NUMBER;

    printf("First  = %i\n",  First    );
    printf("Second = %i\n",  Second);
    printf("Third  = %i\n\n", Third );

    Second  = &First;
    *Second = NUMBER-1;
    Second  = (int*)NUMBER;

    printf("First  = %i\n",  First    );
    printf("Second = %i\n",  Second);
    printf("Third  = %i\n\n", Third );

    Third  = &Second;
    **Third = NUMBER-1; // <<< CRASH!!!
    Third  = (int**)(NUMBER+1);

    printf("First  = %i\n",  First    );
    printf("Second = %i\n",  Second);
    printf("Third  = %i\n\n", Third );

    return 0;
}
Avatar billede arne_v Ekspert
28. juni 2006 - 04:46 #1
Second  = (int*)NUMBER;

Second indeholder 100

Third  = &Second;

Third indeholder adressen på Second

*Third er Second og dermed 100

**Third er indholdet af adresse 100 og den har du ikke adgang til at opdatere
(måske ikke engang til at læse)
Avatar billede d34c0n Praktikant
28. juni 2006 - 05:15 #2
hej arne.. det jeg ville have den til er Third skulle holde værdien for NUMBER +1
Avatar billede d34c0n Praktikant
28. juni 2006 - 05:18 #3
og pointers er ret nyt for mig :)
Avatar billede arne_v Ekspert
29. juni 2006 - 01:50 #4
det gør du også i

Third  = (int**)(NUMBER+1);

men

Third  = &Second;
**Third = NUMBER-1;

giver problemet som beskrevet
Avatar billede d34c0n Praktikant
29. juni 2006 - 03:22 #5
hvordan ville jeg gøre det så.. jeg prøvede at få Third til at decrease Second med 1.
Avatar billede arne_v Ekspert
29. juni 2006 - 04:04 #6
*Third = (int*)(NUMBER-1);
Avatar billede arne_v Ekspert
29. juni 2006 - 04:05 #7
men du har forhåbentlig ikke tænkt dig at bruge pointere på den måde i rigtige kode
Avatar billede d34c0n Praktikant
30. juni 2006 - 18:14 #8
altså det er bare nogen forsøg jeg tester med pointers.. jeg har aldrig rigtig brugt pointers før eller haft brug for dem egentlig. har stadig lidt svært ved at se pointen ved brug af pointers :) men det er nok fordi jeg ikke helt forstår det vel.
Avatar billede arne_v Ekspert
30. juni 2006 - 18:35 #9
dynamisk allokering af arrays

out argumenter ved funktionas kald

data strukturer som linkede lister eller traer
Avatar billede d34c0n Praktikant
07. juli 2006 - 16:39 #10
ok vil du lave et svar? :)
Avatar billede arne_v Ekspert
07. juli 2006 - 21:28 #11
kommer her
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester