Avatar billede frodi Nybegynder
09. april 2005 - 16:19 Der er 10 kommentarer og
1 løsning

pointer til array

Hej

Hvad er problemet her..?

void normalizeArray(int *array[])
{   
    int a = 46, b = 109, c = 51;

    array[0] = &a;
    array[1] = &b;
    array[2] = &c;

}
main()
{
        int *array2 [3];

    normalizeArray(array2);
   
    cout << *array2[0] << endl;
    cout << *array2[1] << endl;
    cout << *array2[2] << endl;
}

Udskrift:

46
-858993460
-858993460


Hvorfor indeholder variabel [1] og [2] ikke de tal der er sat ?

v/ Frodi
Avatar billede arne_v Ekspert
09. april 2005 - 16:26 #1
Du returnerer adresser på lokale variable.

void normalizeArray(int array[])

    int a = 46, b = 109, c = 51;

    array[0] = a;
    array[1] = b;
    array[2] = c;
}
Avatar billede arne_v Ekspert
09. april 2005 - 16:28 #2
#include <iostream>

using namespace std;

void normalizeArray(int array[])

    int a = 46, b = 109, c = 51;

    array[0] = a;
    array[1] = b;
    array[2] = c;
}

int main()
{
    int array2[3];

    normalizeArray(array2);
 
    cout << array2[0] << endl;
    cout << array2[1] << endl;
    cout << array2[2] << endl;

  return 0;
}

udskriver det som du forventer
Avatar billede frodi Nybegynder
09. april 2005 - 16:32 #3
Ok.. Har stadigvæk et problem..

jeg kan ikke bruge din kode direkte, vel ? hvad anet skal ændres, så...

og hvorfor virker min kode for den første variabel ? de returnerer korrekt for array2[0] = 46

v/ Frodi

p.s Metoden skal kunne modtage et int array, manipulere det, og siden læse fra det igen
Avatar billede frodi Nybegynder
09. april 2005 - 16:37 #4
ok..det forstår jeg slet ikke :) men det virker :)

så, tusind tak..

nu er det jo netop en lokal variabel man gemmer tallene i..

array2  skulle efter min opfattelse stadigvæk være tomt..

V/ Frodi
Avatar billede arne_v Ekspert
09. april 2005 - 16:40 #5
int a = 46, b = 109, c = 51;  // a peger på et stykke memory med 46

    array[0] = &a; // array[0] peger på det stykke memory

    } // det stykke memory bliver markeret som ledig til genbrug

cout << *array2[0] << endl; // udskriver hvad der nu tilfældigvis er i det stykke memory
Avatar billede arne_v Ekspert
09. april 2005 - 16:41 #6
mit eksempel flyttede værdierne over
Avatar billede arne_v Ekspert
09. april 2005 - 16:41 #7
og et svar
Avatar billede frodi Nybegynder
09. april 2005 - 16:49 #8
Ok, tak for hjælp, hvad mener du med "og et svar" :) har du fået dine points?

/Frodi
Avatar billede arne_v Ekspert
09. april 2005 - 16:50 #9
jep
Avatar billede frodi Nybegynder
09. april 2005 - 17:00 #10
Lige en ting til.....

Det jeg ikke forstår...Kunne det også laves med pointere ? hvor man bruger * eller & i metode hovedet ? bare nysgerrig...

noget i stil med:

void normalizeArray(int *array[])

}

eller

void normalizeArray(int &array[])

}

og så et kald til metoden a la

normalizeArray(*mitArray);

eller

normalizeArray(&mitArray);

v/ Frodi
Avatar billede arne_v Ekspert
09. april 2005 - 17:04 #11
Man bruger * og & til pointer of adresse.

void f(int *v) // skal kaldes med pointer til int
{
  *v = 123; // vi ændrer det som pointeren peger på
}

int v;
f(&v); // vi kalder med adressen på v
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis