Permalänk
Medlem

C++ problem: en array av pekare?

Jag har löst ett problem i pseudokod men i riktig kod blir det fubar.
Tanken är att jag skall skapa en array med 4 positioner och i varje position lägga en pekare som pekar på en array av double.
På detta sätt kan jag skapa en matris eftersom pekarna i positionerna 1-4 i sin tur pekar på en array med 4 värden (en 4x4 matris).

Användaren skall kunna mata in två nummer och motsvarande rader skall byta plats så jag tänkte att en array av pekare skulle kunna lösa detta (ta in radnumren som skall byta plats och switcha deras motsvarande pekare).

Anywho, här är iaf koden som inte funkar. Hur har jag tänkt galet?

double* m[MAX_SIZE];

double *vektor1 = new double[MAX_SIZE];
double *vektor2 = new double[MAX_SIZE];
double *vektor3 = new double[MAX_SIZE];
double *vektor4 = new double[MAX_SIZE];

vektor1[0] = 1.1;vektor1[1] = 1.2;vektor1[2] = 1.3;vektor1[3] = 1.4;
vektor2[0] = 2.1;vektor2[1] = 2.2;vektor2[2] = 2.3;vektor2[3] = 2.4;
vektor3[0] = 3.1;vektor3[1] = 3.2;vektor3[2] = 3.3;vektor3[3] = 3.4;
vektor4[0] = 4.1;vektor4[1] = 4.2;vektor4[2] = 4.3;vektor4[3] = 4.4;

*m[0] = *vektor1;

// cout <<*m[0]; ger värdet 1.1 men jag vill ju att den skall skriva ut 1.1 1.2 1.3 osv...

Visa signatur

Carpe Cerevisi!

Permalänk
Medlem

Att skriva *vektor1 är samma sak som att skriva vektor1[0].
Gör istället tilldelningen: m[0] = vektor1; sen kommer du åt de andra värdena i vektor1 genom *(m[0]+1) eller
*(m[0]+2) osv.

Permalänk
Medlem

Alright, tack för hjälpen! Nu har jag nog koll på läget.

Visa signatur

Carpe Cerevisi!

Permalänk
Medlem

Även om Shejk redan har svarat och klytus har fått ordning på det skadar det nog inte med ett exempel för andra som söker samma sak.

#include <iostream> const int SIZE = 4; void PrintPointerArray ( double ** p, int size ); int main ( ) { double* v1 = new double[SIZE]; double* v2 = new double[SIZE]; v1[0] = 2.1; v1[1] = 2.2; v1[2] = 2.3; v1[3] = 2.4; v2[0] = 3.1; v2[1] = 3.2; v2[2] = 3.3; v2[3] = 3.4; PrintPointerArray ( &v1, SIZE ); PrintPointerArray ( &v2, SIZE ); return 0; } void PrintPointerArray ( double ** p, int size ) { for ( int i = 0; i < size; i++ ) std::cout << *(*p+i) << std::endl; }

Permalänk

Tror inte alls att 'klytus' löst sitt problem ifall det handlar om att "byta plats och switcha deras motsvarande pekare" som han/hon skrev i sitt ursprungliga inlägg.

Advanced Pointer Topics
http://www.cs.cf.ac.uk/Dave/C/node12.html