Just nu i M3-nätverket
Jump to content

Hjälp


Mic

Recommended Posts

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!

Link to comment
Share on other sites

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

 

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...