#include #include int adding (int a[], int); int summing (int*, int); int adding (int a[], int n) { int i, sum = 0; for (i = 0; i < n; i++) sum += a[i]; return sum; } int summing (int* a, int n) { int sum = 0; while (n-- > 0) { // sum += *a++; // output is 6 6 sum += (*a)++; // output is 10 6 why is adding now wrong? // sum += *(a++); // output is 6 6 printf (" sum = %d", sum); } return sum; } void main (void) { int b[10] = {0,1,2,3,4, 5,6,7,8,9}; int i; printf ("\nAdding = %d Summing = %d", adding (b, 4), summing (&b[0], 4)); for (i=0; i<9; i++) printf("\n%d", b[i]); printf ("\nAdding = %d", adding (b, 4)); printf ("\nAdding = %d\n", adding (b, 4)); printf ("\nSumming = %d", summing (b, 4)); for (i=0; i<9; i++) printf("\n%d", b[i]); } // Read King P. 226 or // Read K&R P. 95 // Output on Mac with Metrowerks C/C++ is: // Adding = 10 Summing = 6 Why is the output from adding not 6? // Adding = 10 // Summing = 22 Why is the output from summing now 22? // If parameters are copied into functions, why are all the outputs not 6? // The output from the gnu C compiler is: // Adding = 6 Summing = 6 // Adding = 10 // Summing = 22 // Output from PC with Borland C/C++ compiler is: // Current array: 0 1 2 3 4 5 6 7 8 9 // // in summing()... n=3:sum= 0 n=2:sum= 1 n=1:sum= 3 n=0:sum= 6 // // in adding()... i=0:sum= 4 i=1:sum= 5 i=2:sum= 7 i=3:sum= 10 // // Adding = 10 Summing = 6 // // Current array: 4 1 2 3 4 5 6 7 8 9 // // in adding()... i=0:sum= 4 i=1:sum= 5 i=2:sum= 7 i=3:sum= 10 // // Adding = 10 // // Current array: 4 1 2 3 4 5 6 7 8 9 // // in summing()... n=3:sum= 4 n=2:sum= 9 n=1:sum= 15 n=0:sum= 22 // // Summing = 22 // // Current array: 8 1 2 3 4 5 6 7 8 9 // // If still in doubt then intitialize // int b[] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18};