EXERCISES ON POINTERS 1. What's the difference between the following declarations. A. int *x; B. int* x; C. int * x; 2. Assume x = 5, y = 10. What are the values of x and y after calling swap1(x, y)? void swap1(int a, int b) { int t; t = a; a = b; b = t; } 3. Assume x = 5, y = 10. What are the values of x and y after calling swap2(&x, &y)? void swap2(int *pa, int *pb) { int t; t = *pa; *pa = *pb; *pb = t; } 4. Assume int x[5] = {0, 1, 2, 3, 4}. What are the values of x after calling swap3(x, 1, 4)? void swap3(int a[], int i, int j) { int t; t = a[i]; a[i] = a[j]; a[j] = t; } 5. Assume int x[5] = {0, 1, 2, 3, 4}. What are the values of x after calling swap2(x+1, x+4)? 6. Assume int x[5] = {0, 1, 2, 3, 4}. What does print3(&x[0]) print? print3(&x[2])? print3(&x[4])? void print3(int x[]) { int i; for (i = 0; i < 3; i++) printf("%d ", x[i]); } 7. When we pass an array to a function in C, it passes a pointer to the 0th array element instead. Why doesn't C just create a new local copy of the array, as it does with integers? 8. What is the difference between the following two function: int middle1(int a[], int n) { int middle2(int *a, int n) { return a[n/2]; return a[n/2]; } } 9. To print an integer n to standard output we use printf("%d", n), but to read it in we use scanf("%d ", &n). Why is the & necessary with scanf?