#include void square_all(int *A, size_t n_items){ printf("Sizeof A: %d\n", sizeof(A)); for(int *i = A; i < A + n_items; i++) *i = *i * *i; } #define array_printf(array, items, type, flag) \ for(type *i = array; i < array + items; i++) \ printf("*i = "flag"\n", *i); int main(){ int A[] = {3, 5, 7, 9, 11, 13, 15, 17, 19, 21}; size_t n_items = sizeof(A) / sizeof(int); printf("n_items = %lu\n", n_items); square_all(A, 10); printf("n_items = %lu\n", n_items); array_printf(A, n_items, int, "%d"); // After this, "for" and "while" are banned! // But we'll print the array again float B[] = {1.5, 2.6, 3.8}; array_printf(B, 3, float, "%f"); int *i = A; loop_top: printf("(goto version) *i = %d\n", *i); i++; if(i < A + n_items) goto loop_top; return 0; }