Avatar billede krismort Nybegynder
27. januar 2002 - 22:52 Der er 4 kommentarer og
2 løsninger

i = new long [1][1] ?

Hvorfor kan jeg gøre sådan her:
long *i;
i = new long[123];
men ikke
i = new long[123][123];

?

Hvad skal jeg gøre for at få det sidste til at lykkedes og hvad kalder man det entligt når man omdefinerer en variabel på den her måde med new (type) ?

På forhånd tak
Kristian
Avatar billede erikjacobsen Ekspert
28. januar 2002 - 00:54 #1
Din "i" peger på en liste af integers. Derfor for du fejl når
den skal pege på en liste af en liste af integers. Skal det ikke
være

  (long []) * i;
Avatar billede alvion Nybegynder
28. januar 2002 - 04:51 #2
eller

long **i;

- Carsten ("3-stjernet" C programmør ;-)
Avatar billede alvion Nybegynder
28. januar 2002 - 04:56 #3
Og for lige at svare på dit andet spørgsmål: Man kalder det såmænd ikke noget, "når man omdefinerer en variabel på den her måde med new (type)", for det kan man ikke.

"new" returnerer en pointer til noget hukommelse, der nu er reserveret til dit program. Det er din opgave, at sørge for at bruge hukommelsen rigtigt (dvs. enten lade din pointer pege på en type, som svarer til den du har angivet til "new" ELLER typecaste resultatet fra new til den type pointer du bruger).

F.eks. kan du godt gøre således (hvis du synes det er sjovt...)

char *s;

s = (char *)new long[123][123];

En alternativ måde at reservere 15129 bytes til en streng...
Avatar billede soepro Nybegynder
28. januar 2002 - 08:40 #4
En 'new long[123][123]' er et TO-dimensionelt array, mens 'long *i' er en pointer til eet element. (Som jo KAN være starten på et array som i new long[123].) Derfor får du ikke lov at caste variablen 'i' til long[][]. Grundlæggende set skal definitionen af din variabel, og det der står efter 'new' altså være ens. Men så er det jo lige at i C giver følgende definitioner samme resultat:

long **i;
long *i[];
long[] *i;
long[][] i;

idet * og [] kan bruges i stedetfor hindanden, når vi taler om pointere og arrays af en given type.
Avatar billede chries Nybegynder
28. januar 2002 - 09:15 #5
Du skal erklærer din "long *i" til et pointer til et array, og fortælle hvor stort det er.

F.eks hvis du bruger:
new long[5][10]

returner new long(*)[10]. D.v.s at du forsøger at tildele en pointer "et array af long med størrelsen [10]" til en pointer af type long.

Den korrekte måde er at erklærer din variabel til en pointer af typen "pointer til et array af long med størrelsen [10]"

long (*lp)[10];
lp = new float[5][10];
Avatar billede chries Nybegynder
28. januar 2002 - 09:17 #6
long (*lp)[10];
er en ren erklærering, der allokeres intet array 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