More about pionter and array

May012009

#include <stdio.h>


void strSort(u_char **a, int n);

typedef unsigned char u_char;
#define SIZE 5
int main()
{
int i,j;

/* for (i = 0; i != 0; i < 2) */
/* i++; */
/* printf("%d\n", i); */

char* a[2] = {"abc", "ef"};

for (i = 0; i < 2; i++){

for (j = 0; j < 3; j++)
printf("%x, ", &a[i][j]);
printf("\n");
}


char **pa = a;

char **p2 = pa + 1;

printf("%x, ", a);
printf("%x, ", pa);
printf("%x \n", p2);

printf("%x, ", *p2 - 1);
printf("%x, ", p2[-1]);
printf("%x,\n", p2[0]);

printf("%x, %x\n", *p2[-1] + 1, *p2[0]+1);

printf("%x, %x\n", *(p2[-1] + 1), *(p2[0]+1));

///
char b[2][3] = { "aa", "bb"};

char (*pb)[3] = b;

printf("%c, %c", pb[0][1], (*(pb + 1))[1]);


////

u_char *tobesort[SIZE] = {"cd", "ab", "ef", "ac", "dg"};

strSort(tobesort, SIZE);
for (i = 0; i < SIZE; i++)
printf("%s, ", tobesort[i]);
printf("\n");
return 0;

}

#define swap(a, b, c) c = a, a = b, b = c

void strSort(u_char **a, int n)
{
/* insertion sort of string */

u_char **aj, **ak;
u_char *s, *t, *tmp;


for (aj = a+1; n-- > 1; aj++)
for (ak = aj; ak > a; ak--) {
for (s = ak[0], t = ak[-1]; *s && *t ; t++, s++)
if (*s != *t)
break;
if (*s >= *t)
break;
swap(ak[0], ak[-1], tmp);
}
}