C++ Foundation With Data Structures Lecture 5: Functions, Variables and Scope
C++ Foundation With Data Structures Lecture 5: Functions, Variables and Scope
Functions
A
Function
is
a
collection
of
statements
designed
to
perform
a
specific
task.
Function
is
like
a
black
box
that
can
take
certain
input(s)
as
its
parameters
and
can
output
a
value
which
is
the
return
value.
A
function
is
created
so
that
one
can
use
it
as
many
time
as
needed
just
by
using
the
name
of
the
function,
you
do
not
need
to
type
the
statements
in
the
function
every
time
required.
Defining
Function
return_type
function_name(parameter
1,
parameter
2,
………)
{
statements;
}
• return
type:
A
function
may
return
a
value.
The
return
type
of
the
function
is
the
data
type
of
the
value
that
function
returns.
Sometimes
function
is
not
required
to
return
any
value
and
still
performs
the
desired
task.
The
return
type
of
such
functions
is
void.
Example:
Following
is
the
example
of
a
function
that
sum
of
two
numbers.
Here
input
to
the
function
are
the
numbers
and
output
is
their
sum.
1. int
findSum(
int
a,
int
b){
2.
int
sum
=
a
+
b;
3.
return
sum;
4. }
Function
Calling
Now
that
we
have
read
about
how
to
create
a
function
lets
see
how
to
call
the
function.
To
call
the
function
you
need
to
know
the
name
of
the
function
and
number
of
parameters
required
and
their
data
types
and
to
collect
the
returned
value
by
the
function
you
need
to
know
the
return
type
of
the
function.
Example
5. #include<iostream>
6. using
namespace
std;
7. int
findSum(
int
a,
int
b){
8.
int
sum
=
a
+
b;
9.
return
sum;
10. }
11. int
main
()
{
12.
int
a
=
10,
b
=
20;
13.
int
c
=
findSum
(a,
b);
//
function
findSum
()
is
called
using
its
name
and
by
knowing
14.
cout<<
c;
//
the
number
of
parameters
and
their
data
type.
15. }
//
integer
c
is
used
to
collect
the
returned
value
by
the
function
Output:
30
IMPORTANT
POINTS:
• Number
of
parameter
and
their
data
type
while
calling
must
match
with
function
signature.
Consider
the
above
example,
while
calling
function
findSum
()
the
number
of
parameters
are
two
and
both
the
parameter
are
of
integer
type.
• It
is
okay
not
to
collect
the
return
value
of
function.
For
example,
in
the
above
code
to
find
the
sum
of
two
numbers
it
is
right
to
print
the
return
value
directly.
“cout<<findSum(a,b);”
• void
return
type
functions:
These
are
the
functions
that
do
not
return
any
value
to
calling
function.
These
functions
are
created
and
used
to
perform
specific
task
just
like
the
normal
function
except
they
do
not
return
a
value
after
function
executes.
Following
are
some
more
examples
of
functions
and
their
use
to
give
you
a
better
idea.
Function
to
find
area
of
circle
1. #include<iostream>
2. using
namespace
std;
3. double
findArea(
double
radius){
//return
type
of
the
function
is
double.
4.
double
area
=
3.14
*
radius
*
radius;
5.
return
area;
6. }
7. int
main
()
{
8.
double
radius
=
5.8;
9.
double
c
=
findArea
(radius);
10.
cout<<
c;
11.
}
Function
to
print
average
1. #include<iostream>
2. using
namespace
std;
3.
4. void
printAverage(int
a,
int
b
){
//return
type
of
the
function
is
void
12.
int
avg
=
(a
+
b)
/
2;
cout<<avg
<<
endl;
5. }
//
This
function
does
not
return
any
value
6.
7. int
main
()
{
8.
int
a
=
15,
b
=
25;
9.
printAverage
(a,
b);
10. }
The
function
being
called
is
called
callee(here
it
is
findsum
function)
and
the
function
which
calls
the
callee
is
called
the
caller
(here
main
function
is
the
caller)
.
When
a
function
is
called,
programme
control
goes
to
the
entry
point
of
the
function.
Entry
point
is
where
the
function
is
defined.
So
focus
now
shifts
to
callee
and
the
caller
function
goes
in
paused
state
.
For
Example:
In
above
code
entry
point
of
the
function
findSum
()
is
at
line
number
3.
So
when
at
line
number
9
the
function
call
occurs
the
control
goes
to
line
number
3,
then
after
the
statements
in
the
function
findSum
()
are
executed
the
programme
control
comes
back
to
line
number
9.
Role
of
stack
in
function
calling
(call
stack)
A
call
stack
is
a
storage
area
that
store
information
about
the
active
function
and
paused
functions.
It
stores
parameters
of
the
function,
return
address
of
the
function
and
variables
of
the
function
that
are
created
statically.
Once
the
function
statements
are
terminated
or
the
function
has
returned
a
value,
the
call
stack
removes
all
the
information
about
that
function
from
the
stack.
Local
Variables
Local
variable
is
a
variable
that
is
given
a
local
scope.
Local
variable
belonging
to
a
function
or
a
block
overrides
any
other
variable
with
same
name
in
the
larger
scope.
Scope
of
a
variable
is
part
of
a
programme
for
which
this
variable
is
accessible.
Example:
1. #include<iostream>
2. using
namespace
std;
3. int
main(){
4.
int
a
=
10;
5.
if
(1){
6.
int
a
=
5;
7.
cout<<
a<<endl;
8.
}
9.
cout<<
a;
10. }
Output
5
10
In
the
above
code
the
variable
a
declared
inside
the
block
after
if
statement
is
a
local
variable
for
this
block
and
is
different
from
the
the
variable
a
declared
outside
this
block.
Both
these
variable
are
allocated
to
different
memory.
Loop
variable
Loop
variable
is
a
variable
which
defines
the
loop
index
for
each
iteration.
Example
“for
(int
i
=
0;
i
<
3;
i++)
{
//
variable
i
is
the
loop
variable
…….;
……..;
statements;
}
“
For
this
example,
variable
i
is
the
loop
variable.
Variables
in
the
same
scope
Scope
is
part
of
programme
where
the
declared
variable
is
accessible.
In
the
same
scope,
no
two
variables
can
have
name.
However,
it
is
possible
for
two
variables
to
have
same
name
if
they
are
declared
in
different
scope.
Example:
1. #include<iostream>
2. using
namespace
std;
3. int
main
()
{
4.
int
a
=
10;
5.
int
a
=
5;
//
two
variables
with
same
name,
the
code
will
not
compile
6.
cout<<
a;
7. }
For
the
above
code,
there
are
two
variables
with
same
name
a
in
the
same
scope
of
main
()
function.
Hence
the
above
code
will
not
compile.
But
the
code
given
below
will
compile
because
the
two
variables
with
same
name
a
are
declared
in
different
scope.
1. #include<iostream>
2. using
namespace
std;
3. int
main
()
{
4.
int
a
=
10;
5.
if
(1){
6.
int
a
=
5;
7.
cout<<
a<<endl;
8.
}
9.
cout<<
a;
10. }
Pass
by
value:
When
the
parameters
are
passed
to
a
function
by
pass
by
value
method,
then
the
formal
parameters
are
allocated
to
a
new
memory.
These
parameters
have
same
value
as
that
of
actual
parameters.
Since
the
formal
parameters
are
allocated
to
new
memory
any
changes
in
these
parameters
will
not
reflect
to
actual
parameters.
Example:
//Function
to
increase
the
parameters
value
1. #include<iostream>
2. using
namespace
std;
3. void
increment
(int
x,
int
y)
{
//
x
and
y
are
formal
parameters
4.
x++;
5.
y
=
y
+
2;
6.
cout<<x<<”:
“<<y<<endl;
7. }
8.
9. int
main
()
{
10.
int
a
=
10,
b
=
20;
11.
increment
(a,
b);
//
a
and
b
are
actual
parameters
12.
cout<<
a<<”:
“<<b;
13. }
Output:
11:
22
10:
20
For
the
above
code,
changes
in
the
values
of
x
and
y
are
not
reflected
to
a
and
b
because
x
and
y
are
formal
parameters
and
are
local
to
function
increment
so
any
changes
in
their
values
here
won’t
affect
variables
a
and
b
inside
main.