#include <stdio.h>

void print_int (void* a)
{
  printf ("Int: %d\n", *((int*)a));
}

void print_string (void* a)
{
  printf ("String: %s\n", *((char**)a));
}

void foreach (void* vec, size_t width, int length, void (*func)(void*))
{
  int i;
  for (i = 0; i < length; i += width)
    func (vec + i);
}

int main()
{
  int vec_int[] = { 1, 2, 3, 5 };
  char* vec_string[] = { "Eins", "Zwei", "Drei", "Vier", "Fuenf" };

  foreach (vec_int, sizeof (int), sizeof(vec_int), print_int);
  foreach (vec_string, sizeof (char*), sizeof(vec_string), print_string);
  return 0;
}

/***************
$ ./foreach 
Int: 1
Int: 2
Int: 3
Int: 5
String: Eins
String: Zwei
String: Drei
String: Vier
String: Fuenf
******************/

