1. int arr[1000]; int i, value = 1; for (i = 0; i < 1000; i++) { arr[i] = value; value = value + 2; } --- OR --- int arr[1000]; int i; for (i = 0; i < 1000; i++) { arr[i] = 2 * i + 1; } The important thing to note here is the INDICES go from 0...999, but the values go 1,3,5, ... 1999. 2. printf("Address: %u\n", p); printf("Value: %lf\n", *p); Note that the best format specifier to use for addresses is %u, the "unsigned int". Otherwise you will see large address values show up as negative values, which of course doesn't make sense for RAM addresses. 3. Symbol Table RAM type name addr addr value --------------------------------- ------------------------ int x 1000 1000 5 int y 1004 1004 10 int * p 1008 1008 1004 -> 1012 4. int count(int * arr, int size, int target); 5. offset of m[4][2] = 4*#cols + 2 = 4*3 + 2 = 14 The formula for the offset is *always*: i * #cols + j