// Example loop to look at different kinds of loops. typedef unsigned long size_t; // Forward. Returns index past end if not found. size_t findnum(int *a, size_t n, int k) { for (size_t i = 0; i != n; i++) { if (a[i] == k) return i; } return n; } // Backward. Finds last occurrence, returns (size_t)-1 on failure. size_t findnum_b(int *a, size_t n, int k) { while (n--) { if (a[n] == k) break; } return n; } // With sentinel, mutating array, as Knuth recommends in "Structured // Programming With go to Statements." size_t findnum_s(int *a, size_t n, int k) { a[n] = k; for (size_t i = 0; ; i++) { if (a[i] == k) return i; } } // With sentinel, mutating array, returning pointer. int* findnum_p(int *a, size_t n, int k) { a[n] = k; while (*a != k) a++; return a; }