/* * Revised version of simple-array.c: * * Adds a function to print the array using pointers. * * Adds code to print pointers to various things. */ #include #include #define ASIZE 10 #define SEED 5 void printarray(int size, int nums[size]) { printf("size of array in printarray %d\n", (int) sizeof(nums)); for (int i = 0; i < size; ++i) { printf("nums[%d] is %d\n", i, nums[i]); } } void printarray2(int size, int *nums) { printf("size of array in printarray2 %d\n", (int) sizeof(nums)); for (int * p = nums; p < nums+size; ++p) { printf("%d\n", *p); } } void fillwithrandom(int size, int nums[]) { srand(SEED); for (int i = 0; i < size; ++i) { nums[i] = rand(); } } int main(void) { int a; int nums[ASIZE]; int b; printf("size of array in main %d\n", (int) sizeof(nums)); fillwithrandom(ASIZE, nums); printarray(ASIZE, nums); printarray2(ASIZE, nums); printf("enter index\n"); int index; if (scanf("%d", &index) != 1) { printf("invalid\n"); return 1; /* bail out */ } if ((index < 0) || (index >= ASIZE)) { printf("out of bounds -- good luck\n"); } printf("a at %p\n", &a); printf("b at %p\n", &b); printf("start of array %p\n", nums); printf("just past end %p\n", nums+ASIZE); printf("nums[index] %p\n", &nums[index]); nums[index] = 100; printarray(ASIZE, nums); return 0; }