Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
37 views

C Functions

The document discusses C functions including creating functions, function prototypes, parameters, return values, and math functions. It covers passing parameters by value or reference, returning values from functions, and using function prototypes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views

C Functions

The document discusses C functions including creating functions, function prototypes, parameters, return values, and math functions. It covers passing parameters by value or reference, returning values from functions, and using function prototypes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 24

C Functions

Objectives
• Create functions
• Function prototypes
• Parameters
– Pass by value or reference
– Sending a reference
• Return values
• Math functions
Intro
• Why:
– Divide and conquer
– Reuse abstractions
– Don’t rebuild the bridge
• What:
– Used prepackaged functions
• printf, scanf, rand()
– Create our own
• main
– Pass parameters
– Accept return values
Math
• #include <math.h>
• Use any math function
• If c1 = 13.0, d = 3.0 and f = 4.0, then the
statement
printf( "%.2f", sqrt( c1 + d * f ) );
©1992-2013 by Pearson Education, Inc. All
Rights Reserved.
©1992-2013 by Pearson Education, Inc. All
Rights Reserved.
• Choose a name
Create your function
– Function should perform a single well defined task
– If you can’t find a concise descriptive name, you may have too
many jobs for the function
• Define a contract
– Inputs
• Arguments – choose type
• None should be noted as void
• Will the function change the parameter’s value?
– Output
• Only one ; by convention, 0 means good
• Write prototype
– Looks like function header but has ;
– int square( int y );
– Tells compiler what is valid input and output
– Forces type conversion
• Write body
• Call the function
Sample Function
#include <stdio.h>
int square ( int y ); // function prototype
// function main begins program execution
int main ( void )
{ int x; // counter
for ( x = 1; x <= 10; x++ ) {// loop 10 times and calc square of x each time
printf ( "%d ", square ( x ) ); // function call
}
puts (""); // add a blank line
}
// square function returns the square of its parm
int square ( int y ) // y is a copy of the x sent
{
return y * y; // returns square of y as an int
}
D From Deitel C How to Program
return
• return serves two purposes:
– It tells the computer the value to return as the
result
– It tells the computer to leave the function
immediately and return the calling function (or
the main program).
• Void return:
– Ex: void printit ( int x );
– You can still return to leave, but without a value
Prototypes
• Looks like function header but has ;
• int square( int y );
• Forces type conversion
• Tells compiler what is valid input and output
• Placement
– Applies to all functions appearing within the top level
braces (or all if outside all braces)
– Can put into its own .h file and then include without
<>
• #include “myfunctions.h” (no semicolon)
• No Overloading
• Every function name can have only one contract
Where do the variables live?
• On Stack: (lives and dies with function)
– Local – created in the function – automatic – on stack
– Argument – same as local
• On Heap: (lives with program life)
– Use keyword static
• static int x = 1;
• When you return to the function it will retain old value
– Global
• declare outside a function block
Function Call Stack
• Pile like one of dishes
– Access from the top
– Call a function – push it on the stack
– Execute function
• Push on other functions from within function
• Variables created in the stack
– Finish executing a function – pop it off the stack
– supports the creation, maintenance and destruction of
each called function’s automatic variables (local
variables, parameters)
Credit to Deitel – C How to program 7 th ed ©1992-2013 by Pearson
Education, Inc. All Rights Reserved.
Credit to Deitel – C How to program 7 th ed ©1992-2013 by Pearson
Education, Inc. All Rights Reserved.
What Are Reference Parameters?
• Reference parameters do not copy the value of
the parameter.
• Instead, they give the function being called a
copy of the address at which the data is stored.
This way, the function works with the original
data.
• We call this passing by reference because we
are making references to the parameters.
Write SquareInPlace
with Reference Parm
• tell the main program about the change in y by
placing (*) between the data type and variable
name:
int squareInPlace (int *y)
{ *y = *y * *y;
return 0;}
• Send an address instead of the variable contents
using (&) before variable name:
int number = 6;
squareInPlace (&number);
printf(“%d”, number);
Passing Reference Parameters

Any data
number 4.0 y intended for y
in the
function goes
to the
location of
number in the
main
program
When to Use Value and Reference
Parameters
• We use value parameters when:
– We are not going to change the parameters’ value
– We may change it but the main program should
not know about it
• When we are simply printing the value
– We use reference parameters when:
– We are going to change the parameter’s value and
the main program MUST know about it.
– We are reading in a new value
Recursion – Function calls itself
• Method for repetition
• Need a stopping condition
• Need to call with some way to reach the stop
eventually
• Pushes copies of itself onto the stack (memory
use)
©1992-2013 by Pearson Education, Inc. All
Rights Reserved.
©1992-2013 by Pearson Education, Inc. All
Rights Reserved.
©1992-2013 by Pearson Education, Inc. All
Rights Reserved.
Java Comparison
Feature C Java
Including
Math #include "math.h" part of base
functions
Calling Math
x = sqrt(2.2); x = Math.sqrt(2.2);
function
public static int max(int a, int
functions int max(int a, int b)
b)
primitive data types, structs,
all primitive data types and
pass-by- and pointers are passed by
references (which includes
value value; array decays to
arrays), are passed by value
pointer
yes for methods, no for
overloading no
operators
Summary
• Create a function
– <return type> <function name> (<type> <var> …)
• Call a function (can call it recursively)
– <function name> (<var>…)
• Pass by reference
– Argument accepts address: *<var name>
– Caller sends address: &<var name>
• Variable life
– Local vs global

You might also like