#include #include struct collection { int* values; size_t size; size_t capacity; }; void collection_print(struct collection * c, void(*f)(int)) { for (size_t i = 0; i < c->size; i++) { (*f)(c->values[i]); } } struct collection * new_random_collection() { struct collection* new = malloc(sizeof(struct collection)); if (!new) { return NULL; } new->size = 50; new->capacity = 100; new->values = malloc(new->capacity * sizeof(int)); if (!new->values) { free(new); return NULL; } for (size_t i = 0; i < new->size; i++) { new->values[i] = rand(); } return new; } void collection_delete(struct collection *c) { free(c->values); free(c); } void pretty_print(int b) { printf("%d, ", b); } int main() { struct collection* c; c = new_random_collection(); collection_print(c, pretty_print); collection_delete(c); }