0% found this document useful (0 votes)
11 views36 pages

Lec 21 Pointers in C

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1/ 36

Pointer and Functions

Lecture 21

Slides Ref: Sadaf Iqbal


 Both actual and
Pass by Reference
formal parameters refer to same
locations

 Changes made inside the function are actually reflected in


actual parameters of caller

 When we call a function by passing the addresses of


actual parameters then this way of calling the function is
known as call by reference.

 The operation performed on formal parameters, affects the


value of actual parameters (both actual and formal
parameters refer to same locations)

 Special variable is required to hold the address

 Those special variables are called pointers

2
 Pointers are those variables that can store address of
Return multiple values from a function

Return more than one values from a


function by using the method called
“call by address”, or “call by
reference”

Using pointers

3
Example of Function call by Reference

• * is known as reference operator by writing *


in front of prt1 and ptr2 we are accessing
values of that particular address

• printf (“x=%d”, y=%d” , x,y);

4 • Output: x=20 y=10


Explanation
*ptr1=20

*ptr2=10

To use call by reference we need to do two things:


•Pass the addresses of the actual arguments instead of
passing values to the function.
•Declare the formal arguments of the function as pointer
5
variables of an appropriate type.
Example 1 : Function call by
Reference

6
Example:2 Increment the num by 1

#include<stdio.h>
void try_to_change(int *, int *);
int main()
{
int x = 10, y = 20;
printf("Initial value of x = %d\n", x); Expected output
printf("Initial value of y = %d\n", y);
printf("\nCalling the function\n");
try_to_change(&x, &y);
printf("\nValues after function call\n\n");
printf("Final value of x = %d\n", x);
printf("Final value of y = %d\n", y);
// signal to operating system everything works
fine
return 0;}
void try_to_change(int *x, int *y)
{ (*x)++;
(*y)++;
printf("\nValue of x (inside function) = %d\n", *x);
printf("Value of y (inside function) = %d\n", *y);}

7
Example 3: Function Call by Reference – Swapping numbers

• The values of the variables have been changed after calling


the swapnum() function

• The swap happened on the addresses of the variables


8 num1 and num2.
Example 4: Function call by
• The function fun() expects a
Reference
pointer ptr to an integer (or
an address of an integer).

• It modifies the value at the


address ptr.

• The dereference operator * is


used to access the value at
an address.

• In the statement ‘*ptr = 30’,


value at address ptr is
changed to 30.

• The address operator & is


used to get the address of a
variable of any data type.

• In the function call statement


9
‘fun(&x)’, the address of x is
Example of Function to return multiple values using pointers

#include <stdio.h>

// Function to return multiple values using


pointers
void initialize(int *a, int *b, char *c)
{
*a = 10;
*b = 20;
*c = 'A';
}
// Return multiple values from a function in C
int main(void)
{
int a, b;
char c;

initialize(&a, &b, &c);


printf("a = %d, b = %d, c = %c", a, b,
10
c);
Example 2: Define a function that can return quotient
and remainder after dividing two numbers from one
single function.

#include<stdio.h>
void div(int a, int b, int *quotient, int *remainder) {
*quotient = a / b;
*remainder = a % b;
}
main() {
int a = 76, b = 10;
int q, r;
div(a, b, &q, &r);
printf("Quotient is: %d\nRemainder is: %d\n", q, r);
}
 Output
 Quotient is: 7
 Remainder is: 6
11
More Examples
13
14
15
16
17
Difference between call by value and call by reference

18
Q1: Write a C Program which take elements store in an
array. Print the elements stored in the array using
pointers.
#include <stdio.h>
int main(void)
{
int scores[] = {1500, 1700, 2250};
int i = 0;
int *ptr = NULL;
ptr = &scores;
for(i=0;i<3;i++) {
printf("Value stored at scores[%d] = %d\n", i, *ptr);
/* increment */
ptr++;
}
}
Q2: Consider a scenario where you need to
find out the average marks obtained by a
class of 10 students stored in an array . The
average marks should be printed using
pointers?
#include <stdio.h>
int main(void)
{
int scores[] = {1500, 1700, 2250};
int i = 0,sum=0;
float avg;
int *ptr = NULL;
ptr = &scores;
for(i=0;i<3;i++) {
sum+=*ptr;
ptr++;
}
avg=sum/i;
printf("The average marks is = %0.2f\n", avg);
}
Q3: write a C program to Swap two numbers
using Pointer?
#include <stdio.h>
void swap(int *a, int *b);
int main()
{
int m = 10, n = 20;
printf("m = %d\n", m);
printf("n = %d\n\n", n);
swap(&m, &n);//passing address of m and n to the
swap function
printf("After Swapping:\n\n");
printf("m = %d\n", m);
printf("n = %d", n);
return 0;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
Q4: write a function that can return quotient
and remainder after dividing two numbers
from one single function.
#include <stdio.h>
void div(int a,int b,int *quotient, int *remainder)
{
*quotient=a/b;
*remainder=a%b;
}
void main()
{
int a=76,b=10;
int c,d;
div(a,b,&c,&d);
printf("quotient=%d",c);
printf("\nremainder=%d",d);
}
Q6: write a function that receives 5 integers and returns
the sum, average and standard deviation of these
numbers
from one single function and printed through main( ).
#include<stdio.h>
#include<math.h> //for sqrt function
void func(int a, int b, int c, int d, int e,int *summ,float *avg, float *std_dev);
int main()
{
int a,b,c,d,e,sum;
float avg,std_dev;
printf("Enter 1st number: ");
scanf("%d", &a);
printf("Enter 2nd number: ");
scanf("%d", &b);
printf("Enter 3rd number: ");
scanf("%d", &c);
printf("Enter 4th number: ");
scanf("%d", &d);
printf("Enter 5th number: ");
scanf("%d", &e);
func(a,b,c,d,e,&sum,&avg,&std_dev);
printf("The Sum is: %d\n", sum);
printf("The mean is: %0.2f\n", avg);
printf("The Standard Deviation is: %0.2f", std_dev);
return 0;
}
void func(int a, int b, int c, int d, int e,int *summ,float *avg, float *std_dev)
{
int p;
*summ = a+b+c+d+e;
*avg = *summ/5;
//standard deviation
p= ((a-*avg)*(a-*avg))+((b-*avg)*(b-*avg))+((c-*avg)*(c-*avg))+((d-
*avg)*(d-*avg))+((e-*avg)*(e-*avg));
*std_dev= sqrt(p/5);
}
Q5: write a function that can return the
perimeter of rectangle, circumference of a
circle, area of rectangle and circle from one
single function and printed through main( ).
while the length, breadth and radius are input
through the keyboard.
#include <stdio.h>
int main( )
{
int r,l,w,AoR,PoR ;
float AoC,CoC;
printf ( "\nEnter radius of a circle:" ) ;
scanf ( "%d", &r ) ;
printf ( "\nEnter length of rectangle:" ) ;
scanf ( "%d", &l) ;
printf ( "\nEnter width of rectangle:" ) ;
scanf ( "%d", &w) ;
area_circum_peri ( r,l,w, &AoC, &CoC,&AoR,&PoR ) ;
printf ( "Area of circle = %0.2f", AoC ) ;
printf ( "\nCircumference of circle = %0.2f", CoC) ;
printf ( "\nArea of Rectangle = %d", AoR ) ;
printf ( "\nPerimeter of Rectangle = %d", PoR) ;
return 0;
}
void area_circum_peri( int r,int l,int w,float *aoc,float *coc,int *aor,int *por )
{
*aoc = 3.14 * r * r ;
*coc = 2 * 3.14 * r ;
*aor=l*w;
*por=2*(l+w);
}
Call by Value: Example area_circle( int r) // func definition
{
#include <stdio.h> float aoc;
int main( ) aoc = 3.14 * r * r ;
{ return aoc;
int r,l,w,AoR,PoR ; }
float AoC,CoC; circum_circle( int r) // func definition
printf ( "\nEnter radius of a circle:" ) ; {
scanf ( "%d", &r ) ; float coc;
printf ( "\nEnter length of rectangle:" ) ; coc = 2 * 3.14 * r ;
scanf ( "%d", &l) ; return coc;
printf ( "\nEnter width of rectangle:" ) ; }
scanf ( "%d", &w) ; area_rect( int l, int w) // func definition
AoC=area_circle(r) ; // func calling {
CoC=circum_circle(r) ; // func calling int aor;
AoR=area_rect(l,w) ; // func calling aor = l*w;
PoR=peri_rect(l,w) ; // func calling return aor;
printf ( "Area of circle = %0.2f", AoC ) ; }
printf ( "\nCircumference of circle = %0.2f", CoC) ; peri_rect( int l, int w) // func definition
printf ( "\nArea of Rectangle = %d", AoR ) ; {
printf ( "\nPerimeter of Rectangle = %d", PoR) ; int por;
return 0; por = 2*(l+w);
} return por;
}
34
Call by Reference: Example
#include <stdio.h>
int main( )
{
int r,l,w,AoR,PoR ;
float AoC,CoC;
printf ( "\nEnter radius of a circle:" ) ;
scanf ( "%d", &r ) ;
printf ( "\nEnter length of rectangle:" ) ;
scanf ( "%d", &l) ;
printf ( "\nEnter width of rectangle:" ) ;
scanf ( "%d", &w) ;
area_circum_peri ( r,l,w, &AoC, &CoC,&AoR,&PoR ) ;
printf ( "Area of circle = %0.2f", AoC ) ;
printf ( "\nCircumference of circle = %0.2f", CoC) ;
printf ( "\nArea of Rectangle = %d", AoR ) ;
printf ( "\nPerimeter of Rectangle = %d", PoR) ;
return 0;
}
area_circum_peri( int r,int l,int w,float *aoc,float *coc,int *aor,int *por )
{
*aoc = 3.14 * r * r ;
*coc = 2 * 3.14 * r ;
*aor=l*w;
35 *por=2*(l+w); }
36

You might also like