home *** CD-ROM | disk | FTP | other *** search
-
- *****Listing 1*****
-
-
- #include <stdio.h>
- #include <stdlib.h>
-
- /* structure type flag values */
-
- #define TYPENONE 0 /* Not pointing at an object */
- #define TYPECHAR 1 /* char */
- #define TYPEINT 2 /* int */
- #define TYPELONG 3 /* long */
- #define TYPEDOUBLE 4 /* double */
-
- struct node {
- struct node *pfwd; /* forward ptr */
- struct node *pbwd; /* backward ptr */
- void *pobject; /* ptr to object */
- unsigned int objtype; /* indicate object type */
- };
-
- main()
- {
- char c = 'A';
- int i = 10;
- long int l = 123456;
- double d = 123.45;
- struct node *pnode;
-
- pnode = malloc(sizeof(struct node));
-
- /* let's point to a double */
-
- pnode->pobject = &d;
- pnode->objtype = TYPEDOUBLE;
- pnode->pfwd = NULL;
- pnode->pbwd = NULL;
-
- /* at a later point, let's process the object to which we point */
-
- switch (pnode->objtype) {
-
- case TYPECHAR:
- printf("char: %c\n", *(char *)pnode->pobject);
- break;
-
- case TYPEINT:
- printf("int: %d\n", *(int *)pnode->pobject);
- break;
-
- case TYPELONG:
- printf("long: %ld\n", *(long *)pnode->pobject);
- break;
-
- case TYPEDOUBLE:
- printf("double: %f\n", *(double *)pnode->pobject);
- break;
-
- case TYPENONE:
- printf("none:\n");
- break;
- }
- }
-
- The output generated by this program is:
- double: 123.450000
-
-