#include <stdio.h> typedef struct { int x, y; } Point; void printPoint( Point *p ) { printf("(%d, %d) ", p->x, p->y ); } Point *newPoint() { Point *p = (Point *)malloc( sizeof( Point ) ); p->x=0; p->y=0; return p; } void setPoint( Point *p, int x, int y ) { p->x = x; p->y = y; } typedef struct { int red, green, blue; } Color; Color *newColor() { Color *c = (Color *)malloc( sizeof( Color ) ); c->red=0; c->green=0; c->blue=0; return c; } /* function to set a Color */ void setColor( Color *c, int r, int g, int b ) { if ( r<0 || r>255 ) r = 0; if ( g<0 || g>255 ) g = 0; if ( b<0 || b>255 ) b = 0; c->red = r; c->green = g; c->blue = b; } void printColor( Color *c ) { printf("%3d red, %3d grn, %3d blu", c->red, c->green, c->blue ); } typedef struct { Point *p0, *p1, *p2; Color *color; } TriangleMod; void printTriangleMod( TriangleMod *t ) { printf("Points: "); printPoint( t->p0 ); printPoint( t->p1 ); printPoint( t->p2 ); printf(" Color: "); printColor( t->color ); printf("\n"); } TriangleMod *newTriangleMod() { TriangleMod *tm; tm = (TriangleMod *)malloc( sizeof( TriangleMod ) ); tm->p0 = newPoint(); tm->p1 = newPoint(); tm->p2 = newPoint(); tm->color = newColor(); return tm; } void freeTriangleMod( TriangleMod *t ) { free( t->color); free( t->p0); free( t->p1); free( t->p2); free( t ); } void setTriangleModPoint( TriangleMod *tri, int num, int x, int y) { if ( num==0 ) setPoint( tri->p0, x, y ); if ( num==1 ) setPoint( tri->p1, x, y ); if ( num==2 ) setPoint( tri->p2, x, y ); } void setTriangleModColor( TriangleMod *tri, int r, int g, int b) { setColor( tri->color, r, g, b ); } int main() { const int length = 8; int j; TriangleMod *triarray[length]; /* Initialize the array */ for ( j=0; j<length; j++ ) triarray[j] = NULL; /* Create several array elements here */ triarray[0] = newTriangleMod(); setTriangleModPoint( triarray[0], 0, 245, 148 ); setTriangleModPoint( triarray[0], 1, -97, 32 ); setTriangleModPoint( triarray[0], 2, 12, -34 ); setTriangleModColor( triarray[0], 200, 160, 100); triarray[3] = newTriangleMod(); setTriangleModPoint( triarray[3], 0, 0, 0 ); setTriangleModPoint( triarray[3], 1, 100, 0 ); setTriangleModPoint( triarray[3], 2, 100, 100 ); setTriangleModColor( triarray[3], 0, 150, 150); triarray[5] = newTriangleMod(); setTriangleModPoint( triarray[5], 0, 99, 65 ); setTriangleModPoint( triarray[5], 1, 123, 300 ); setTriangleModPoint( triarray[5], 2, 134, -12 ); setTriangleModColor( triarray[5], 100, 250, 200 ); /* Print out the array here. Print "null" for empty cells. */ for ( j=0; j<length; j++ ) { printf("%d: ", j ); if ( !triarray[j] ) printf("null\n"); else printTriangleMod( triarray[j] ); } /* Free memory */ for ( j=0; j<length; j++ ) if ( triarray[j] ) freeTriangleMod( triarray[j] ); system( "pause" ); }
Comments: