C types are not something you can store. There's no C code like:
type types[10];
types[0] = typeof(int);
*target = *(types[0] *)&source;
Objective-C has type awareness, but would require you to map all of your original data to an Objective-C class. E.g.
NSArray *objects = [[NSArray alloc] init]; // Old-school non-lightweight-templated, to hold anything
[objects addObject:[NSNumber numberWithInt:23]];
[objects addObject:[NSNumber numberWithFloat:23.0f]];
[objects addObject:@"I'm a string"];
...
if([objects[0] isKindOfClass:[NSString class]]) {
NSLog(@"Object zero is the string %@", objects[0]);
}
if([objects[0] isKindOfClass:[NSNumber class]]) {
CFNumberType numberType = CFNumberGetType(number);
... table here to map the enum numberType to a string ...
NSLog(@"Object zero is a number of type %@ with value %@", type, objects[0]);
}
You can't in general store types without values; this is because there's really no value whatsoever in doing so. Type and value are inherently connected — severing them while keeping type explicit and retaining a one-to-one mapping suggests a severe design deficiency.