Comp 255: Lab 02 Parameter Passing pass by value pass by reference In, out, in/out and array parameters int readInt()// reads/inputs unsigned integer { char str[80]; int i; int number; i = 0; str[i] = getchar(); A1: if (str[i] == '\n') goto A2; i++; str[i] = getchar(); goto A1; A2: str[i] = '\0'; // convert to integer via Horner's Method number = 0; i = 0; A3: if (str[i] == '\0') goto A4; number = number * 10 + (str[i] - 48); i++; goto A3; A4: return(number); } int printInt(int number)// prints unsigned integer { char str[80]; int i; i = 0; C1: str[i] = (number % 10) + 48; number = number / 10; i++; if (number > 0)// bottom test loop goto C1; // print out string backwards C3: if (i == 0) goto C4; i--; putchar(str[i]); goto C3; C4: return(0); } int printStr(char s[]) { int i = 0; P1: if (s[i] == '\0') goto P2; putchar(s[i]); i++; goto P1; P2: return(0); } // prints cstring Pass By Reference in C In pass by reference the address of a variable is passed; not the value of a variable In the definition of the function this is indicated by prefixing a *, the pointer operator, to the formal parameter int fubar(int *x, int *y) So in the call of the function you must explicitly pass the address of the variable using the & operator err = fubar(&a, &b) Pass by Reference in C In the definition of the function you must dereference all pass by reference parameters to obtain the value of the parameter using the * dereference operator. int fubar(int *x, int *y) { int q, r; if (*y == 0) goto F1; q = *x / *y; r = *x % *y; *x = q; *y = r; return(0); F1: return(1); // error! } max01 function example pass by value; function returns a value int max01(int a, int b) { if (a > b) return a; else return b; } Function definition int main() { int a, b, c; c = max01(a, b); // function call max02 function example int max02(int a, int b, int *c) { if (a > b) c* = a; else c* = b; } int main() { int a, b, c; max02(a, b, &c); //function call Function definition Four Logical Types of Parameters in parameters: used to pass values into a function; call by value out parameters: used to return values from a function; call by reference in/out parameters: parameters will are passed in to a function, modified and returned to the calling program; call by reference array parameters: parameter is an array type; syntactically pass by value Notes