#include #include struct int_vector { int *contents; size_t allocated_space; size_t current_size; }; void init_vector(struct int_vector *v, size_t initial_capacity){ v->contents = malloc(initial_capacity * sizeof(int)); v->allocated_space = initial_capacity; v->current_size = 0; } void push_back(struct int_vector *v, int new_number){ if(v->allocated_space <= v->current_size){ v->allocated_space *= 2; v->contents = realloc(v->contents, v->allocated_space * sizeof(int)); } v->contents[v->current_size++] = new_number; } int pop_back(struct int_vector *v){ if(!v->current_size) return 0; return v->contents[--v->current_size]; } void deallocate_vector(struct int_vector *v){ free(v->contents); } int main(){ struct int_vector iv; init_vector(&iv, 3); push_back(&iv, 5); push_back(&iv, 15); push_back(&iv, 25); push_back(&iv, 35); push_back(&iv, 45); for(int i = 0; i < iv.current_size; i++){ printf("%d\n", iv.contents[i]); } int i = 48; top: push_back(&iv, i); i += 3; if(i < 70) goto top; // This is not how goto is used in the kernel i = 0; printf("["); second_top: printf("%d, ", iv.contents[i]); i++; if(i < iv.current_size) goto second_top; printf("\b\b]\n"); return 0; }