Hallo!
Xin hat geschrieben:
Es geht also nicht um sizeof( int * ), sondern um sizeof( int[100] ).
zweidim_Array zeigt damit auf den ersten Eintrag des ersten Arrays.
Was ist k? Und was ist der erste Eintrag bei einem mehrdimensionalen Array?
Der Wert k bezeichnet die Anzahl der Werte im Array (siehe auch
http://www.proggen.org/doku.php?id=c:lib:stdlib:qsort)
Hier ein kleiner Quellcode, der eigentlich tut was er soll:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *ptr1, const void *ptr2) {
if( *(int *)ptr1 < *(int *)ptr2 )
return (-1);
else if( *(int *)ptr1 > *(int *)ptr2 )
return (1);
else
return (0); /* Beide Elemente sind gleich */
}
int main (void)
{
int tmp1[10];
int tmp2[10][2];
int i = 0;
tmp2[0][0]= 2245;
tmp2[1][0]= 2245;
tmp2[2][0]= 235;
tmp2[3][0]= 2245;
tmp2[4][0]= 2245;
tmp2[5][0]= 400;
tmp2[6][0]= 4391;
tmp2[7][0]= 4391;
tmp2[8][0]= 400;
tmp2[9][0]= 4391;
tmp2[0][1]= 65907;
tmp2[1][1]= 65908;
tmp2[2][1]= 65909;
tmp2[3][1]= 65910;
tmp2[4][1]= 65911;
tmp2[5][1]= 65912;
tmp2[6][1]= 65913;
tmp2[7][1]= 65914;
tmp2[8][1]= 65915;
tmp2[9][1]= 65916;
for( i = 0; i < 10; ++i ){
tmp1[i]=tmp2[i][0];
}
printf( "\n1-dimArray:\n" );
printf( "unsortierte Reihenfolge:\n" );
for( i = 0; i < 10; ++i ){
printf( "%d: %8d \n", i, tmp1[i] );
}
qsort( tmp1, 10, sizeof( int ), cmp );
printf( "\nsortierte Reihenfolge:\n" );
for( i = 0; i < 10; ++i ){
printf( "%d: %8d \n", i, tmp1[i] );
}
printf( "\n2-dimArray:\n" );
printf( "unsortierte Reihenfolge:\n" );
for( i = 0; i < 10; ++i ){
printf( "%d: %8d %8d\n", i, tmp2[i][0], tmp2[i][1] );
}
qsort( tmp2, 10, sizeof( int * ), cmp );
printf( "\nsortierte Reihenfolge:\n" );
for( i = 0; i < 10; ++i ){
printf( "%d: %8d %8d\n", i, tmp2[i][0], tmp2[i][1] );
}
return EXIT_SUCCESS;
}
Wenn ich sizeof(int[10]) einsetzte kommt qsort auch ins schleudern...
Und mit temp2[10][3] klappts leider auch nicht.
"21" ist nur die halbe Wahrheit...