0% found this document useful (0 votes)
45 views91 pages

Unit 4 Functions and Pointers

This document discusses functions and pointers in C programming. It defines what a function is and explains that functions are used to avoid rewriting the same code repeatedly and make programs easier to design, understand and maintain. It describes two types of functions - predefined/standard functions and user-defined functions. It explains the different elements of a user-defined function like declaration, definition, call. It also discusses parameters, return statements, function prototypes, and different ways parameters can be passed including call by value and call by reference.

Uploaded by

Preetha V
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views91 pages

Unit 4 Functions and Pointers

This document discusses functions and pointers in C programming. It defines what a function is and explains that functions are used to avoid rewriting the same code repeatedly and make programs easier to design, understand and maintain. It describes two types of functions - predefined/standard functions and user-defined functions. It explains the different elements of a user-defined function like declaration, definition, call. It also discusses parameters, return statements, function prototypes, and different ways parameters can be passed including call by value and call by reference.

Uploaded by

Preetha V
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 91

FUNCTIONS AND

POINTERS

PREETHA V AP/CSE, SRIT


FUNCTION

 A Function is a sub-program, which contains one or more statements and it


performs some task when its called.
 A computer program cannot handle all the tasks by itself. Instead its requests
other program like entities – called functions in C to get its tasks done.
 A function is a self contained block of statements that perform a coherent
task of same kind

PREETHA V AP/CSE, SRIT


Why we use functions?

 Writing functions avoids rewriting the same code over and


over.
 Suppose that there is a section of code in a program that
calculates area of a circle. If later in the program we want
to calculate the area of a different circle, we wont like to
write the same instructions again.
 Instead, we would prefer to jump to a “section of code”
that calculates area and then jump back to the place from
where we left off.
 This section of code is nothing but a function.
PREETHA V - AP/CSE, SRIT.
Why we use functions?

 Using functions it becomes easier to write programs and


keep track of what they are doing.
 If the operation of a program can be divided in to
separate activities, and each activity placed in a different
function, then each could be written and checked more or
less independently.
 Separating the code in to modular functions also makes
the pro-gram easier to design and understand.

PREETHA V - AP/CSE, SRIT.


TYPES

 There are two different types of functions:

Pre-defined functions or Standard


functions
User-defined functions

PREETHA V - AP/CSE, SRIT.


Pre-Defined Functions

 The pre-defined functions or library functions are built-in functions.


 The user can use the functions, but cannot modify those functions.
 Example: sqrt()

PREETHA V - AP/CSE, SRIT.


User-Defined Functions

 The functions defined by the user for their requirements are called user-
defined functions.
 Whenever it is needed, the user can modify this function.
 Example: sum(a,b)

PREETHA V - AP/CSE, SRIT.


Advantage of User-Defined
Functions
 The length of the source program can be reduced.
 It is easy to locate errors.
 It avoids coding of repeated instructions.

PREETHA V - AP/CSE, SRIT.


Elements of User-Defined Function

 Function declaration
 Function definition
 Function call

PREETHA V - AP/CSE, SRIT.


Function

 Syntax

datatype function_name (parameters list)


{
local variable declaration;
…………………………
body of the function;
…………………………
return(expression);
}
PREETHA V - AP/CSE, SRIT.
How Function Works?

 Once a function is called the control passes to the called function.


 The working of calling function is temporarily stopped.
 When the execution of called function is completed then the control returns
back to the calling function and executes the next statement.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
Parameters

 Actual Parameter
These are the parameters which are transferred from the calling function to
the called function.

 Formal Parameter
These are the parameters which are used in the called function.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
return Statement

 The return statement may or may not send some values to the calling
function.

 Syntax:
return; (or)
return (expression);

PREETHA V - AP/CSE, SRIT.


Function Prototypes

There are four types:

 Function with no arguments and no return values.


 Function with arguments and no return values.
 Function with arguments and return values.
 Function with no arguments and with return values.

PREETHA V - AP/CSE, SRIT.


Function with no arguments
and no return values
 Here no data transfer takes place between the calling function and the called
function.
 These functions act independently, i.e. they get input and display output in
the same block.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
Example
#include <stdio.h>
#include<conio.h>
void main() //calling function
{
void add(void);
add();
}
void add() //called function
{
int a,b,c;
printf("\nEnter two number:");
scanf("%d%d",&a,&b);
c=a+b;
printf("\nSum is:%d",c);
PREETHA V - AP/CSE, SRIT.
}
Output

Enter two number:3


4
Sum is:7

PREETHA V - AP/CSE, SRIT.


Function with arguments
and no return values
 Here data transfer take place between the calling function and the called
function.
 It is a one way data communication, i.e. the called program receives data
from calling program but it does not return any value to the calling program.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
Example

#include <stdio.h>
#include<conio.h>
void main()
{
int a,b;
void add(int,int);
printf("\nEnter two number:");
scanf("%d%d",&a,&b);
add(a,b);
}
void add(int x,int y) //function with arguments
{
int z;
z=x+y;
printf("\nSum is:%d",z);
PREETHA V - AP/CSE, SRIT.
}
Output

Enter two number:2


4
Sum is:6

PREETHA V - AP/CSE, SRIT.


Function with arguments
and return values
 Here data transfer takes place between the calling function and the called
function as well as between called function and calling function .
 It is a two way data communication, i.e. the called program receives data
from calling program and it returns some value to the calling program.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
Example
#include <stdio.h>
#include<conio.h>
void main()
{
int a,b,c;
int add(int,int);
printf("\nEnter two number:");
scanf("%d%d",&a,&b);
c=add(a,b);
printf("\nSum is:%d",c);
}
int add(int x,int y)
{
int z;
z=x+y;
PREETHA V - AP/CSE, SRIT. return(z);

}
Output

Enter two number:6


7
Sum is:13

PREETHA V - AP/CSE, SRIT.


Function with no arguments
and with return values
 Here data transfer takes place between the called function and the calling
function.
 It is a one way data communication, i.e. the called program does not any
receive data from the calling program but it returns some value to the calling
program.

PREETHA V - AP/CSE, SRIT.


PREETHA V - AP/CSE, SRIT.
Example
#include <stdio.h>
#include<conio.h>
void main()
{
int add(),d;
d=add();
printf("\nSum is:%d",d);
}
int add() //function with no argument
{
int a,b,c;
printf("\nEnter two number:");
scanf("%d%d",&a,&b);
c=a+b;
PREETHA V - AP/CSE, SRIT.
return(c);
}
Output

Enter two number:5


8
Sum is:13

PREETHA V - AP/CSE, SRIT.


Parameter Passing Methods

 There are two different ways of passing parameters to a method, they are:

 Call by value
 Call by reference

PREETHA V - AP/CSE, SRIT.


Call by value

 Actual arguments are passed to the formal arguments.


 Any changes made to the formal argument does not affect the actual
argument.

PREETHA V - AP/CSE, SRIT.


Example

#include <stdio.h> int change(int a,int b)


#include<conio.h> {
void main() int c;
{ c=a;
int x,y,change(int,int); a=b;
printf("\nEnter value of x:"); b=c;
scanf("%d",&x); printf("\nValues in the
printf("\nEnter value of y:"); Fuction -->x=%d,y=
scanf("%d",&y); %d",a,b);
change(x,y); }
printf("\n\nValues in the Main()--
>x=%d,y=%d",x,y);
}
PREETHA V - AP/CSE, SRIT.
Output

Enter value of x:5


Enter value of y:6
Values in the Function -->x=6,y=5
Values in the Main()-->x=5,y=6

PREETHA V - AP/CSE, SRIT.


Call by reference

 Instead of passing values, the address of the argument will be passed.


 Any changes made to the formal argument will affect the actual argument.

PREETHA V - AP/CSE, SRIT.


Example
printf("\n\nValues in
#include <stdio.h> the Main()-->x=%d,y=
#include<conio.h> %d",x,y);
void main() }
{ int change(int *a,int
int x,y,change(int*,int*); *b)
printf("\nEnter value of {
x:"); int c;
scanf("%d",&x); c=*a;
printf("\nEnter value of y:");
*a=*b;
scanf("%d",&y);
*b=c;
change(&x,&y);
printf("\nValues in the
Function -->x=%d,y=
PREETHA V - AP/CSE, SRIT. %d",*a,*b);
}
Output

Enter value of x:5


Enter value of y:6
Values in the Function -->x=6,y=5
Values in the Main()-->x=6,y=5

PREETHA V - AP/CSE, SRIT.


Recursion

 It is a process of calling the same function itself again and


again until some condition is satisfied.

Syntax:
func1()
{
………..
func1();
…………
PREETHA V - AP/CSE, SRIT.
}
Example

#include<stdio.h> if(x==1)
#include<conio.h> return(1);
void main() else
{ f=x*rec(x-1);
int a; return(f);
}
int rec(int);
printf("\nEnter the number:");
scanf("%d",&a);
Output:
printf("The factorial of %d! is Enter the number:5
%d",a,rec(a));
The factorial of 5! is 120
}
int rec(int x)
{
PREETHA V - AP/CSE, SRIT.

int f;
Example: Working of 3!

PREETHA V - AP/CSE, SRIT.


Library Function

 Library functions are the pre-defined functions.


 The library function provides functions like mathematical, string
manipulation etc,.
 In order to use a library function, it is necessary to call the
appropriate header file at the beginning of the program.
 The header file informs the program of the name, type, and number and
type of arguments, of all of the functions contained in the library.
 A header file is called via the preprocessor statement.

PREETHA V - AP/CSE, SRIT.


Some Examples of Library
Functions
Math Functions
 sqrt(x):
It is used to find the square root of x
Example: sqrt(36) is 6

 abs(x):
It is used to find the absolute value of x
Example: abs(-36) is 36

 pow(x,y):
It is used to find the value of xy
PREETHA V - AP/CSE, SRIT.
Example: pow(5,2) is 25
 ceil(x):
It is used to find the smallest integer greater than or equal to
x.
Example: ceil(7.7) is 8

 rand():
It is used to generate a random number.

 sin(x):
It is used to find the sine value of x
Example: sin(30) is 0.5

 cos (x):
It is used to find the cosine value of x
PREETHA V - AP/CSE, SRIT.

Example: cos(30) is 0.86


 tan(x):
It is used to find the tan value of x
Example: tan(30) is 0.577

Ctype Functions

 toascii(x):
It is used to find the ASCII value of x
Example: toascii(‘a’) is 97

 toupper(x):
It is used to convert lowercase character to uppercase.
Example: toupper(‘a’) is A toupper(97) is A

 tolower(x):
It is used to convert uppercase character to lowercase.
PREETHA V - AP/CSE, SRIT.
Example: tolower(‘A’) is a
Example:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
void main()
{
int x,y=2;
printf("\nEnter the number:");
scanf("%d",&x);
printf("\nThe square root of %d is %f",x,sqrt(x));
printf("\nThe value of %d power%dis%f ",x,y,pow(6,2));
printf("\nThe ceiling of 6.7 is %f",ceil(6.7));
printf("\nThe floor of 6.7 is %f",floor(6.7));
PREETHA V - AP/CSE, SRIT.
printf("\nThe absolute value of -6 is %d",abs(-6));
printf("\nThe value of sin 45 is %f",sin(45));
printf("\nThe uppercase of 'a' is %c",toupper('a'));
printf("\nThe uppercase of 97 is %c",toupper(97));
getch();
}

PREETHA V - AP/CSE, SRIT.


Output:

Enter the number:6

The square root of 6 is 2.449490


The value of 6 power 2 is 36.000000
The ceiling of 6.7 is 7.000000
The floor of 6.7 is 6.000000
The absolute value of -6 is 6
The value of sin 45 is 0.850904
The uppercase of 'a' is A
The uppercase of 97 is A
PREETHA V - AP/CSE, SRIT.
Applications:

 Math functions
 Computation of Sine Series
 Random Number Generation
 Tower of Hanoi
 Factorial using Recursive functions.

PREETHA V - AP/CSE, SRIT.


Pointers

 Pointer is a variable that contains the address of another variable i.e.. direct
address of the memory location.

 Like any variable or constant, you must declare a pointer before you can use
it to store any variable address.

PREETHA V - AP/CSE, SRIT.


Example:
x=5

x Variable

5 8714 Value
Address

PREETHA V - AP/CSE, SRIT.


Example
#include<stdio.h>
#include<conio.h>
void main()
{
int x=5;
printf("\n The Address of x = %u",&x);
printf("\n The Value of x = %d",x);
}

Output
The Address of x = 8714
The Value of x = 5
PREETHA V - AP/CSE, SRIT.
Pointer Declaration

 Syntax:
data-type *pointer-name;

data-type - Type of the data to


which the pointer points.
pointer-name - Name of the pointer


Example: int *a;

PREETHA V - AP/CSE, SRIT.


Accessing Variable through Pointer

 If a pointer is declared and assigned to a variable, then the variable can be


accessed through the pointer.

 Example:
int *a;
x=5;
a=&x;

PREETHA V - AP/CSE, SRIT.


Example

#include<stdio.h>
#include<conio.h>
void main()
{
int y=10;
int *a;
a=&y;
printf("\n The Value of y = %d",y);
printf("\n The Address of y = %u",&y);
printf("\n The Value of a = %d",a);
printf("\n The Address of a = %u",&a);
}
PREETHA V - AP/CSE, SRIT.
Illustration of the example:

a y Variable
5001 10 Value
Address
8000 5001

PREETHA V - AP/CSE, SRIT.


Output

The Value of y = 10
The Address of y = 5001
The Value of a = 5001
The Address of a = 8000

PREETHA V - AP/CSE, SRIT.


Null Pointer

 A pointer is said to be null pointer if zero is assigned to the pointer.

 For Example:
int *a,*b;
a=b=0;

PREETHA V - AP/CSE, SRIT.


Pointer to Pointer

 Here one pointer stores the address of another pointer variable.

 Example:
int x=10,*a,**b;
a=&x;
b=&a;

PREETHA V - AP/CSE, SRIT.


 Illustration:

b a x Variable
8000 5001 10 Value
Address
9000 8000 5001

PREETHA V - AP/CSE, SRIT.


Example

#include<stdio.h>
#include<conio.h>
void main()
{
int a=10;
int *b,**c;
b=&a;
c=&b;
printf("\n The Value of a = %d",a);
printf("\n The Address of a = %u",&a);
printf("\n The Value of b = %d",b);
printf("\n The Address of b = %u",&b);
printf("\n The Value of c = %d",c);
printf("\n The Address of c = %u",&c);
}
PREETHA V - AP/CSE, SRIT.
Output

The Value of a = 10
The Address of a = 5001
The Value of b = 5001
The Address of b = 8000
The Value of c = 8000
The Address of c = 9000

PREETHA V - AP/CSE, SRIT.


Pointers and Arrays

 The elements of the array can also be accessed through a pointer.

 Example
int a[3]={2,3,7};
int *b;
b=a;

PREETHA V - AP/CSE, SRIT.


Example 1
#include<stdio.h>
#include<conio.h>
void main()
{
int a[3]={2,3,7};
int *b;
b=a;
printf("\n The Value of a[0] = %d",a[0]);
printf("\n The Address of a[0] = %u",&a[0]);
printf("\n The Value of b = %d",b);
}
PREETHA V - AP/CSE, SRIT.
 Illustration of the example:

b a[0] Variable
8744 2 Value
Address
9000 8744

PREETHA V - AP/CSE, SRIT.


Output

The Value of a[0] = 2


The Address of a[0] = 8744
The Value of b = 8744

PREETHA V - AP/CSE, SRIT.


Example 2

#include<stdio.h>
#include<conio.h>
void main()
{
int a[5]={2,3,7,9,10};
int i;
for(i=0;i<5;i++)
{
printf("\n The Value of a[%d] = %d",i,a[i]);
printf("\n The Address of a[%d] = %u",i,&a[i]);
}
}
PREETHA V - AP/CSE, SRIT.
Illustration of the example:

a[0] a[1] a[2] a[3] a[4] Array


2 3 7 9 10
Value

8724 8726 8728 8730 8732 Address

PREETHA V - AP/CSE, SRIT.


Output

The Value of a[0] = 2


The Address of a[0] = 8724
The Value of a[1] = 3
The Address of a[1] = 8726
The Value of a[2] = 7
The Address of a[2] = 8728
The Value of a[3] = 9
The Address of a[3] = 8730
The Value of a[4] = 10
The Address of a[4] = 8732
PREETHA V - AP/CSE, SRIT.
Example 3
#include<stdio.h>
#include<conio.h>
void main()
{
int a[5]={1,2,3,4,5};
int i,sum=0;
int *b;
b=a;
for(i=0;i<5;i++)
{
sum=sum + *b;
b++; //b=b+1
}
printf("\n The Sum is %d",sum);
PREETHA V - AP/CSE, SRIT.
}
Output

The Sum is 15

PREETHA V - AP/CSE, SRIT.


Pointers and Structures

 Syntax:
struct structure_name
{
structure element1;
structure element2;
…………………….
}variable,*ptr;

PREETHA V - AP/CSE, SRIT.


 A sample code illustrating pointers and structure

struct stud
{
int sno;
char name[10];
int mark;
};

struct stud *s;

PREETHA V - AP/CSE, SRIT.


Example
#include<stdio.h>
#include<conio.h>
struct stud
{
int regno;
char name[10];
int m1;
int m2;
int m3;
};
struct stud s;
struct stud *t;
PREETHA V - AP/CSE, SRIT.
void main()
{
float tot,avg;
t=&s;
printf("\nEnter the student regno,name,m1,m2,m3:");
scanf("%d%s%d%d%d",&s.regno,&s.name,&s.m1,&s.m2,&s.m3);
tot=s.m1+s.m2+s.m3;
avg=tot/3;
printf("\nThe student Details are:");
printf("\n%d\t%s\t%f\t%f",s.regno,s.name,tot,avg);
printf("\n%d\t%s\t%f\t%f",t->regno,t->name,tot,avg);
PREETHA V - AP/CSE, SRIT. }
Output

Enter the student regno,name,m1,m2,m3:1


aaa
76
89
76

The student Details are:


1 aaa 241.000000 80.333336
1 aaa 241.000000 80.333336
PREETHA V - AP/CSE, SRIT.
Dynamic Memory Allocation

 The concept of dynamic memory allocation in c language enables the C


programmer to allocate memory at runtime. Dynamic memory allocation in c
language is possible by 4 functions of stdlib.h header file.
 1. malloc()
 2. calloc()
 3. realloc()
 4. free()
Difference between Static and Dynamic
memory allocation

Static memory allocation Dynamic memory allocation


memory is allocated at compile time. memory is allocated at run time.

memory can't be increased while executing memory can be increased while executing
program. program.

used in array. used in linked list.


The methods used for dynamic memory allocation

malloc() allocates single block of requested memory.


calloc() allocates multiple block of requested memory.
reallocates the memory occupied by malloc() or
realloc()
calloc() functions.
free() frees the dynamically allocated memory.
malloc() function in C

 The malloc() function allocates single block of requested memory.


 It doesn't initialize memory at execution time, so it has garbage value
initially.
 It returns NULL if memory is not sufficient.
 The syntax of malloc() function is given below:
 ptr=(cast-type*)malloc(byte-size)
Malloc Example:
 #include<stdio.h>  printf("Sorry! unable to allocate memory")
;
 #include<stdlib.h>
 exit(0);
 int main(){
 }
 int n,i,*ptr,sum=0;  printf("Enter elements of array: ");
 printf("Enter number of elements: ");  for(i=0;i<n;++i)
 { scanf("%d",ptr+i);
 scanf("%d",&n);
 sum+=*(ptr+i);
 ptr=(int*)malloc(n*sizeof(int)); //
 }
memory allocated using malloc
 printf("Sum=%d",sum);
 if(ptr==NULL)
 free(ptr);
 {
 return 0;
 }
Output:

 Enter elements of array: 3


 Enter elements of array: 10
 10
 10
 Sum=30
calloc() function in C

 The calloc() function allocates multiple block of requested memory.


 It initially initialize all bytes to zero.
 It returns NULL if memory is not sufficient.
 The syntax of calloc() function is given below:
 ptr=(cast-type*)calloc(number, byte-size)
Calloc Example:
 #include<stdio.h>  }
 #include<stdlib.h>  printf("Enter elements of array: "
 int main(){ );
 int n,i,*ptr,sum=0;  for(i=0;i<n;++i)
 printf("Enter number of elements: ");  {
 scanf("%d",ptr+i);
 scanf("%d",&n);
 sum+=*(ptr+i);
 ptr=(int*)calloc(n,sizeof(int)); //
memory allocated using calloc  }
 if(ptr==NULL)  printf("Sum=%d",sum);
 {  free(ptr);
 printf("Sorry! unable to allocate me
 return 0;
mory");
 exit(0);  }
Output:

 Enter elements of array: 3


 Enter elements of array: 10
 10
 10
 Sum=30
realloc() function in C

 If memory is not sufficient for malloc() or calloc(), you can reallocate the
memory by realloc() function. In short, it changes the memory size.
 Let's see the syntax of realloc() function.
 ptr=realloc(ptr, new-size)
realloc() Example:

#include <stdio.h> printf("\nEnter the new size: ");


#include <stdlib.h> scanf("%d", &n2); // rellocating the memory
int main() ptr = realloc(ptr, n2 * sizeof(int));
{ printf("Addresses of newly allocated memory:\n");
int *ptr, i , n1, n2; for(i = 0; i < n2; ++i)
printf("Enter size: "); {
scanf("%d", &n1); printf("%pc\n", ptr + i);
ptr = (int*) malloc(n1 * sizeof(int)); free(ptr);
printf("Addresses of previously allocated return 0;
memory:\n"); }
for(i = 0; i < n1; ++i) return 0;
printf("%pc\n",ptr + i); }
Output:
Enter size: 2
Addresses of previously allocated memory:
26855472
26855476

Enter the new size: 4


Addresses of newly allocated memory:
26855472
26855476
26855480
26855484
free() function in C

 The memory occupied by malloc() or calloc() functions must be released by


calling free() function. Otherwise, it will consume memory until program exit.
 Let's see the syntax of free() function.
 free(ptr)
PREETHA V - AP/CSE, SRIT.

You might also like