450 likes | 625 Views
APS105. Functions (and Pointers). Modularity. Modularity Break a program into manageable parts (modules) Modules interoperate with each other Benefits of modularity:. modularity/modules in C: functions. Functions. C pre-defined functions. main Math functions Sqrt () , fabs () , etc
E N D
APS105 Functions (and Pointers)
Modularity • Modularity • Break a program into manageable parts (modules) • Modules interoperate with each other • Benefits of modularity: modularity/modules in C: functions
C pre-defined functions • main • Math functions • Sqrt(), fabs(), etc • I/O functions • printf() , scanf()
Two Types of Functions • Commands • perform a process, but don’t return anything • Queries • evaluate something, return a result • Some languages: • commands: called procedures, subroutines • queries: called functions • C language: • commands: called functions • queries: called functions
Defining a Function • Define a function that prints a blank line . • Note: this is called a "function definition"
Function Prototype • Sometimes must summarize a function • tell the compiler what it needs to know • eg., if function has parameters or return value • Function Prototype: • similar to a copy of the first line of the function definition • Example of a prototype: .
Functions with Parameters • Define a function that prints n blank lines . • Note: n is called a "parameter"
When A Function is Called… • argument(s) is/are evaluated • control passes to the function • parameter(s) is/are assigned value(s) • the values of the argument(s) are copied • i.e., param gets a copy of the value of the arg • this method is called "call-by-value" • the only method used by C • other languages provide other methods • the function is executed • control passes back to the calling function
Example of A Query Function • a function that returns the factorial of an int .
Function Scope of Identifiers/Variables • An identifier/variable exists within its scope • if declared within a function • the scope is within the function • Implications: for a var declared within a func • can't be accessed outside that function • can re-use the identifier in multiple functions
Parameter Type Correspondence • Param and argument types needn't match • as long as they are "assignment compatible" • Example: .
Multiple Returns • A function can have multiple return statements • Example: a function that returns max value .
Avoiding Multiple Returns • Example: a function that returns max value .
No Return • Example: print n blank lines .
Style: Returning Bool • Functions that return bool should be named: is<something> • Produces more readable code • Example: .
Swap • Example: a function to swap two values .
Pointers • Need a way to refer to locations of things • not just a copy of a variable’s value • a pointer: • points to a variable • eg., like a house address points to a house • Example:
Memory • RAM • random access memory • composed of memory chips • organized like a giant table of locations • Addresses • every location in table has an address • just like every house on a street • use the address to read/write a location • In C • addresses are stored in pointer variables • a pointer is a memory address Memory
Understanding Pointers • Declaring a pointer variable int *p; • Declaring and assigning int *p; int x; x = 8; p = &x; Memory .
Using Pointers • Declaring, assigning, and using a pointer int *p; int x; x = 8; p = &x; printf("%d\n",*p); // print what's at p .
Pointers Example double x, y; double *p, *q; x = 3.6; y = 6.7; p = &x; q = &y; *p = 1.0; *q = *p + 1.0; Memory
Pointers Example Again double x, y; double *p, *q; x = 3.6; y = 6.7; p = &x; q = &y; *p = 1.0; *q = *p + 1.0; p x q y
Fixed Swap • Example: a function to swap two values .
Functions that Return Pointers • Create a function called largeLoc • Takes addresses of two doubles • Returns the address of the larger value • Example usage: double x = 2.6; double y = 3.4; double *p; p = largeLoc(&x,&y); .
largeLoc .
Scope of Internal Identifiers • Scope of an identifier: • the range within which it is recognized • an identifier is not recognized outside its scope • i.e., it cannot be used, or compiler will complain • Ex: for (int i = 1; ...; ...) • scope of i is within the for loop only • Scope of a function parameter: • only within the body of the function • Scope of a variable declared in a function • starts at the point of declaration • ends at the end of the block {} it was declared in • called an internal identifier
Scope Example int foo(int x) { int y=5; for (int i=0;i<10;i++) { int z = 3; y *= z + x; } return y; }
Overlapping Scope int i = 1; printf(“i = %d\n”,i); { int i = 2; printf(“i = %d\n”,i); } printf(“i = %d\n”,i); • What is the output?
Scope of External Identifiers • External identifier • one that is declared outside of any function • ex: a function identifier/name is external • Example: int x; // x is an external identifier void main() { ... } • If external ident. declared before all func.s: • then it is called global
Top-Down Modular Design • Functions and scope provide modularity • can build them independently and combine • Modularity eases large programs • break the problem into smaller & smaller parts • until the parts are small and manageable • make these into functions • combine them into the whole
Ex: Goldbach’s Conjecture • Can an even number larger than 2 be expressed as the sum of two primes? .