Just nu i M3-nätverket
Gå till innehåll

Hjälp


Mic

Rekommendera Poster

Hej alla. Har ett par frågor på C++ och hur man ska tänka, håller på att lösa gamla tentatal inför en tenta..

 

Om man har följande programbit:

 

int* A[3], B[3], **p=A, *q=B;

for (int i=+; i<3; i++) {

*p++ = q;

*q++ = i;

}

----*--p;

----p;

++++*p;

for (int i=0; i<3; i++)

cout << **p++ << " ";

 

Hur ska man tänka för att lista ut vad som skrivs ut?

 

Sedan undrar jag hur man ska tolka uttryck som

1. &*Ptr1 == &*Ptr2

2. *&Ptr1 == *&Ptr2

3. int **Table = New int*[100]

 

Många frågor på en gång, hoppas nån kan hjälpa mig!

Länk till kommentar
Dela på andra webbplatser

Suck vilken rysare...det hade varit enklare om man kunde rita...

Försök att rita upp det hela med pilar som 'pekar' på det de pekar mot.

int* A[3], B[3], **p=A, *q=B;

Börja med B[3], en array med tre integers, enkelt.

*q är en pekare som sätts att peka på B[3]

Sen är det 'likadant' med A[3] och **p fast A är en array med arraypekare.

for (int i=+; i<3; i++) {

*p++ = q;

*q++ = i;

}

Här skönjer jag ett tryck fel, ska det inte vara for(int=0 ?? Annars är detta wayovermyhead.

Vad som händer här är att A[0] sätts att peka på vad q pekar på, nämligen B.

Sen stegas p fram ett snäpp (++).

Sen sätts först elementet i B till 0, och q stegas fram.

 

Efter loopen så har du:

B[0]=0,B[1]=1,B[2]=2

A[0] pekar på B, A[1] pekar på B+1, A[2] pekar på B+2.

----*--p;

Detta klarar jag inte av!

Sorry ! Lägger ned!

Någon annan får förklara....:[

 

 

TN

 

 

Länk till kommentar
Dela på andra webbplatser

Jag vart tvungen att snoka lite...

----*--p;

 

Från http://icarus.weber.edu/home/dab/web/cs1130/Slides/chour16_6.pdf

Pointer expressions: idioms

char *cp;

*++cp = *(++cp)

Increment the pointer then get character at the address.

 

*cp++ = *(cp)++

Get the character at the address then increment the pointer.

 

++*cp = ++(*cp)

Increment and then get the character stored at cp.

 

Om man då börjar från höger till vänster/inifrån och ut (vilket jag inte är hundra på), så kan man väl bryta ned

----*--p;

till

--p; // Minska pekaren med ett
--*p; // Minska det pekaren pekar på med ett.
--*p; // Minska en gång till med ett

 

TN

[edit]Har nu provat, resultatet blir detsamma :)

 

[inlägget ändrat 2002-08-27 14:59:24 av Don Tomas]

 

[inlägget ändrat 2002-08-27 17:26:06 av Don Tomas]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...