int* evens(int a[], unsigned int alen, unsigned int* outlen) { unsigned int i, j, nevens = 0; for (i = 0; i < alen; i++) { if (a[i] % 2 == 0) { nevens++; } } int* res = (int*)malloc(sizeof(int) * nevens); // (check if res is NULL and raise error) *outlen = nevens; j = 0; for (i = 0; i < alen; i++) { if (a[i] % 2 == 0) { res[j++] = a[i]; } } return res; } void foo() { int xs[] = {1, 2, 3, 4}; int* es; unsigned int elen; es = evens(xs, 4, &elen); // ... (use es) ... free(es); }