zeiger auf zeiger
-
hallo leute,
habe folgendes Problem:
haben einen vektor von pointer gegeben, der auf beliebige zeichenkette zeigt.
Soll nun eine Funktion schreiben nach dieser Vorgabe:
Schreiben Sie eine Funktion, welche zwei Einträge des Arrays vertauscht. Damit dies funktioniert, müssen Zeiger auf die beiden Elemente übergeben werden. Das bedeutet, Sie müssen mit Pointer arbeiten, die wiederum auf Pointer zeigen - die Übergabeparameter der Vertauschungsfunktion müssen also vom Typ char** sein. Verwenden Sie nicht die Indexnummer im Array als Übergabeparameter.
meine bisherigen Ansätze gingen alle ins Leere vll. kann mir einer einen Denkanstoß geben der mir etwas weiterhilft.
mfg
mb123
-
Zeig mal was du bisher gemacht hast.
-
bisher hab ich das:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>#define MAXLEN 10
#define ARRAYLENGTH 5int laenge,j,i;
char *puffer;
char *array[ARRAYLENGTH];char* zufallszahl()
{
laenge=(rand() % MAXLEN)+1; //zufällige Länge der Zeichenkette ermitteln von 1-MAXLEN //
puffer=(char*)malloc((laenge+1)*sizeof(char));for(j=0;j<=laenge;j++)
{
if(j==(laenge))
*(puffer+j)='\0';else
*(puffer+j)= (rand()%26)+65; // Auf Buchstaben begrenzt, ASCII-Code 65(A)-90(Z) dezimal
}
return puffer;
}void print()
{
printf("Indexnummer:%d\t%s\n\n",i,array[i]);
}void tauschen(char **element1,char **element2)
{}
int main()
{
char *hilfs1, *hilfs2;
time_t t;
srand((unsigned)time(&t));for(i=0;i<ARRAYLENGTH;i++)
{
array[i]=zufallszahl();
print();
}hilfs1=array[0];
hilfs2=array[ARRAYLENGTH-1];
tauschen(&hilfs1,&hilfs2);
printf("Erster Eintrag: %s\n",array[0]);
printf("Letzter Eintrag:%s\n",array[ARRAYLENGTH-1]);}
der vektor von pointern wurde durch die funktion zufallszahl mit zufälligen buchstaben gefüllt. und das tauschen funktioniert natürlich nicht war aber jetzt mein letzter gedanke...
-
Der Umweg über hilfs1 und hilfs1 ist das Problem.
Du sollst doch die Zeiger, die im Array gespeichert sind, vertauschen.
Du vertauscht aber die Zeiger von hilfs1 und hilfs2Nutze beim nächsten mal bitte die Code-Tags (Code mit der Maus markieren uznd auf den C-Button unter dem
klicken)
zufallszahl ist der falsch Name für die Funktion. Die macht etwas ganz anderes.
Du darfst die
free
am Ende des Programs nicht vergessen.
-
Ja weil in der Aufgabenstellung steht : damit dies funktioniert, müssen zeiger auf die beiden elemente übergeben werden... ich glaube da liegt mein problem wie is das zu verstehen ?
-
Es müssen keine Zeiger (als Variable) sein. Die Adressen reichen.
Das "normale" swap kennst du?
void swap(int *v1, int *v2) { int temp = *v1; *v1 = *v2; *v2 = temp; } int a=1,b=2,c,d; //richtig: printf("a: %d b: %d\n", a, b); swap(&a,&b); printf("a: %d b: %d\n", a, b); //so hast du das gemacht: a=1; b=2; c=a; d=b; printf("a: %d b: %d\n", a, b); swap(&c,&d); printf("a: %d b: %d\n", a, b); // sind a und b vertausch?
Bei dir kommt jetzt noch eine Ebene dazu, da du schon mit Zeigern arbeitest.
-
ah oke dann ist hilf1, hilfs2 umsonst jetzt versteh ichs.
danke !