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...