#include #include #include struct va { int n; int nmax; int data[]; }; void create_array(struct va **va, int nmax) { *va = (struct va *) malloc(sizeof(struct va) + nmax * sizeof(int)); if(*va == NULL) return; (*va)->n = 0; (*va)->nmax = nmax; } void init_array(struct va *va, int n, int *src) { if(n > va->nmax) return; va->n = n; memcpy(va->data, src, n * sizeof(int)); } void free_array(struct va *va) { if(va) free(va); } int main(int argc, char *argv[]) { struct va *va = NULL; int t[5] = {1,2,3,4,5}; int i; create_array(&va, 12); init_array(va, 5, t); for(i = 0; i < va->n; ++i) { printf("%d\n", va->data[i]); } free_array(va); return 0; }