Make things easy - use typedef to create pointer types to your structures - then you don't get hung up in pointer notation (as much):
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct wordPair {
char *englishWord;
char *foreignWord;
} WordPair;
typedef WordPair *WordPairPtr;
typedef struct dictionary {
WordPairPtr data;
int nbwords;
int size;
} Dictionary;
typedef Dictionary *DictionaryPtr;
int main( void )
{
/* allocate one dictionary structure */
DictionaryPtr newDictionary = ( DictionaryPtr )malloc( sizeof( Dictionary ) );
/* allocate word pair structure */
newDictionary->data = ( WordPairPtr )malloc( sizeof( WordPair ) );
/* initialize our new dictionary structure */
newDictionary->data->englishWord = ( char * )calloc( 10, sizeof( char ) );
strcpy( newDictionary->data->englishWord, "Hello" );
newDictionary->data->foreignWord = ( char * )calloc( 10, sizeof( char ) );
strcpy( newDictionary->data->foreignWord, "Bonjour" );
newDictionary->nbwords = 1;
newDictionary->size = 1;
/* use it */
printf( "\"%s\" translates to \"%s\"\n",
newDictionary->data->englishWord,
newDictionary->data->foreignWord );
/* free the memory - note we need to do a deep free */
free( newDictionary->data->englishWord );
free( newDictionary->data->foreignWord );
free( newDictionary->data );
free( newDictionary );
return EXIT_SUCCESS;
}