Itération sur même type struct membres en C

Est-il possible d'effectuer une itération d'une structure C, où tous les membres sont de même type, à l'aide d'un pointeur. Voici un exemple de code qui ne compile pas:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int mem1 ;
    int mem2 ;
    int mem3 ;
    int mem4 ;
} foo ;

void my_func( foo* data )
{
    int i ;
    int* tmp = data ; //This line is the problem

    for( i = 0; i < 4; ++i )
    {
        ++tmp ;
        printf( "%d\n", *tmp ) ;
    }
}

int main()
{
    foo my_foo ;
    //
    my_foo.mem1 = 0 ;
    my_foo.mem2 = 1 ;
    my_foo.mem3 = 2 ;
    my_foo.mem4 = 3 ;
    //
    my_func( &my_foo ) ;
    return 0 ;
}

Les membres de truc devrait être aligné dans la mémoire pour être l'un après l'autre, en supposant que votre compilateur/kernel n'essaie pas de fournir de protection de la pile de débordement de la mémoire tampon.

Donc ma question est:

Comment puis-je effectuer une itération sur les membres d'une structure C qui sont du même type.

Avez-vous essayé avec un plâtre, comme int * tmp = (int *)data'? Quel message d'erreur avez-vous l'obtenir?
David, avec la dernière mise à jour, le code fonctionne maintenant. Cette cession génère une fonte avertissement du compilateur. J'espérais qu'il y a un plus "élégant" de la solution.
Selon le langage C spécification, il n'est pas nécessaire que les champs de la structure sont les unes à côté des autres dans la mémoire; les compilateurs sont autorisés à insérer le remplissage entre les membres de champ. Si vous voulez itération, utiliser un tableau.

OriginalL'auteur Misha M | 2009-12-08