/* File: func2.c C functions have access to global variables */ #include /* global variable */ int glob=0 ; int add3(int m) { return m + 3 + glob ; } int add5(int m) { return m + 5 + glob ; } void apply( int (*f) (int), int A[], int n) { for (int i=0 ; i < n ; i++) { A[i] = f( A[i] ) ; } } int main () { int B[10] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19} ; printf("Before:\n") ; for (int i=0 ; i < 10 ; i++) { printf(" B[%d] = %d\n", i, B[i]) ; } apply (add3, B, 10) ; printf("\n\nAfter calling apply(add3, B, 10):\n") ; for (int i=0 ; i < 10 ; i++) { printf(" B[%d] = %d\n", i, B[i]) ; } apply (add5, B, 10) ; printf("\n\nAfter calling apply(add5, B, 10):\n") ; for (int i=0 ; i < 10 ; i++) { printf(" B[%d] = %d\n", i, B[i]) ; } printf("\n\n!!! Changing global variable glob to 100!!!\n") ; glob = 100 ; apply (add3, B, 10) ; printf("\n\nAfter calling apply(add3, B, 10) with new glob:\n") ; for (int i=0 ; i < 10 ; i++) { printf(" B[%d] = %d\n", i, B[i]) ; } apply (add5, B, 10) ; printf("\n\nAfter calling apply(add5, B, 10) with new glob:\n") ; for (int i=0 ; i < 10 ; i++) { printf(" B[%d] = %d\n", i, B[i]) ; } }