/* fill an array, allocated dinamically without malloc,
** with 1, 2, 3, 4, ...
** then sum all of the values and print the result */
#include <stdio.h>
void vlaalloc(size_t nmemb, size_t siz, void (*fx) (void *, size_t)) {
unsigned char data[nmemb * siz];
fx(data, nmemb);
}
int arraysum(int *arr, size_t len) {
int val = 0;
for (size_t i = 0; i < len; i++) val += arr[i];
return val;
}
void seq(void *data, size_t len) {
int *arr = data;
for (size_t i = 0; i < len; i++) arr[i] = i + 1;
printf("array sum is %d\n", arraysum
(arr
, len
)); }
int main(void) {
int n;
if (scanf("%d", &n
) == 1) { vlaalloc(n, sizeof (int), seq);
}
}
LyogZmlsbCBhbiBhcnJheSwgYWxsb2NhdGVkIGRpbmFtaWNhbGx5IHdpdGhvdXQgbWFsbG9jLAoqKiB3aXRoIDEsIDIsIDMsIDQsIC4uLgoqKiB0aGVuIHN1bSBhbGwgb2YgdGhlIHZhbHVlcyBhbmQgcHJpbnQgdGhlIHJlc3VsdCAqLwojaW5jbHVkZSA8c3RkaW8uaD4KCnZvaWQgdmxhYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6LCB2b2lkICgqZngpICh2b2lkICosIHNpemVfdCkpIHsKICB1bnNpZ25lZCBjaGFyIGRhdGFbbm1lbWIgKiBzaXpdOwoKICBmeChkYXRhLCBubWVtYik7Cn0KCmludCBhcnJheXN1bShpbnQgKmFyciwgc2l6ZV90IGxlbikgewogIGludCB2YWwgPSAwOwogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHZhbCArPSBhcnJbaV07CiAgcmV0dXJuIHZhbDsKfQoKdm9pZCBzZXEodm9pZCAqZGF0YSwgc2l6ZV90IGxlbikgewogIGludCAqYXJyID0gZGF0YTsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcnJbaV0gPSBpICsgMTsKICBwcmludGYoImFycmF5IHN1bSBpcyAlZFxuIiwgYXJyYXlzdW0oYXJyLCBsZW4pKTsKfQoKaW50IG1haW4odm9pZCkgewogIGludCBuOwoKICBpZiAoc2NhbmYoIiVkIiwgJm4pID09IDEpIHsKICAgIHZsYWFsbG9jKG4sIHNpemVvZiAoaW50KSwgc2VxKTsKICB9Cn0=