Professional Documents
Culture Documents
C Lec106-110
C Lec106-110
C Lec106-110
PROGRAMMING AND
DATA STRUCTURES
Application of pointers: Largest and
Smallest Element in an Array
NESO ACADEMY
IDEA
min Max
max = 45
(1)if a[i] < min then
min = a[i] 6< 23
#include <stdio.h>
void minMax (int arr(], int len, int *min, int *max)
6
7
8
*min = *max = arr [0]
int ij
:
for (i-1l; i<len; it+)
10
11 if (arr [i] > *max)
12
13
*max =
arr [i];
if (arr [i] < *min)
14
15
*min = arr (i] ;
16
17
18 pint main () {
19 int a[] -
(23, 4, 21, 98, 987, 45, 32, 10, 123, 986, 50, 3, 4,5):
20 int min, max;
21
22
int m
minMà
sizeof(a)/sizeof (a[0]):
a, len, &min, &max)
23
24
printf ("Minimum value in the array is: %d and Maximum value is: %d", min, max)
return 0;
:
25
26
C
PROGRAMMING AND
DATA STRUCTURES
Returning pointers:
Find the mid of the array
NESO ACADEMY
int main()
}
int *findMid (int a[], int n)
{
return &a[n/2];
OUTPUT: 3
NESO ACADEMY
WORD OF CAUTION
For example:
PROGRAMMING AND
DATASTRUCTURES
Important questions
NESOACADEMY
Question1t: Consider the following two statements
int *p = &i;
p = &i;
NESO ACADEMY
Question 3: How to print the address of a variable?
int main() {
int 10;
i =
int *p = &i;
printf("The address of variable i is %p", p);
}
return ;
iOutput: The address of variable i is 0x7ffd5b9a987 c
i
NESO ACADEMY
Question 4: If is
variable and p points
i a to i, which of the
following expressions are aliases of i?
Example a) *p = *(1000) = 10
int i = 10; b) *&p = *(&p) = *(2000) = 1000
int *p =
&i;
C) &p = 2000
i d) *i= *(10) doesn't make sense
1000 2000
NESO ACADEMY
12:35 AMO
C
PROGRAMMING AND
DATA|STRUCTURES
Pointer Arithmetic -Addition
NESO ACADEMY
P
1 2 3 4 5 6 7
p = &a[e]
NESO ACADEMY
WHAT HAPPENS IF WE ADD SOME INTEGER TO THE POINTER?
1 2 3 4 5 6 7
NESO ACADEMY
WHAT HAPPENS IF WE ADD SOME INTEGER TO THE POINTER?
1 2 3 4 5 6 7
3 positions
P=p + 3 means moving the pointer
direction.
in forward
NESO ACADEMY
IN OTHER WORDS..
1 2 3 4 5 6 7
NESO ACADEMY
ip =p+j
=p + ji = ga[i + jli
IN OTHER WORDS..
1 2 4 5 6 7
ip =p + 3! E &a[0 + 3]
NESO ACADEMY
IN OTHER WORDS..
1 2 4 5 6 7
iP =p +3 &a[3]
NESO ACADEMY
AcTUALLY WHAT HAPPENED?
1 2 3 4 5 6 7
1000 1004 1008 1012 1016 1020 1024 1028
ip = &a[O] ip = 1000
NESO ACADEMY
ACTUALLY WHAT HAPPENED?
1 2 3 4 5 6 7
1000 1004 1008 1012 1016 1020 1024 1028
p =p +1 Ep = 1000 + 1 x 4
NESO ACADEMY
AcTUALLY WHAT HAPPENED?
1 2 3 4 5 6 7
1000 1004 1008 1012 1016 1020 1024 1028
p =p +1 p=1004
NESO ACADEMY
ACTUALLY WHAT HAPPENED?
1 2 3 4 5 6 7
1000 1004 1008 1012 1016 1020 1024 1028
iP =p +3 E p = 1000 + 3x 4
NESO ACADEMY
ACTUALLY WHAT HAPPENED?
1 2 3 4 5 6 7
1000 1004 1008 1012 1016 1020 1024 1028
ip =p +3 p=1012
NESO ACADEMY
C
PROGRAMMING AND
DATA|STRUCTURES
Pointer Arithmetic -Subtraction
NESO ACADEMY
RECALL-ADDING INTEGER TO A POINTER
1 2 3 45 6 7
ip =p + 3
NESO ACADEMY
RECALL-ADDING INTEGER TO A POINTER
1 2 3 4 5 6 7
NESO ACADEMY
INOTHER WORDS...
1 2 3 4 5 6 7
p =p - j = &[i - j]
NESO ACADEMY
IN OTHER WORDS..
1 2 3 4 5 6 7
ip = p - 3= &a[3 - 3]
NESO ACADEMY
INOTHER WORDS...
1 2 3 4 56 7
p =p-- 33 =
E&a[e]
NESO ACADEMY
IN REALITY...
1 2 3 4 5 6 7
ip= p - 3 E ip = 1012 - 3 x 4
4
NESO ACADEMY
IN REALITY...
1 2 3 4 5 6 7
iP = p- 3 p = 1000
NESO ACADEMY
SUBTRACTING ONE POINTER FROM ANOTHER
NESO ACADEMY
SUBTRACTING ONE POINTER FROM ANOTHER POINTER
1 2 3 4 5 6 7
q- p = 4
NESO ACADEMY
SUBTRACTING ONE POINTER FROM ANOTHER POINTER
1 2 3 4 5 6 7
IP - q = -4
NESO ACADEMY
IN REALITY...
1 2 3 4 5 6 7
Ifbase address of array is1000
p= 1008 q= 1024
NESO ACADEMY
IN REALITY...
1 2 3 4 5 6 7
f base address of array is 1000
p=1008 q= 1024
NESO ACADEMY
IN REALITY...
1 2 3 4 5 6 7
fbase address of array is 1000
9- p = 16
NESO ACADEMY
IN REALITY...
I 1 2 3 4 5 6 7
base address of array is 1000
If
NESO ACADEMY
IN REALITY..
I 1 2 3 4 5 6 7
Ifbase address of array is 1000
p = 1008 9=p+
iq = 44 = 1024 = 1008 + 4x4
NESO ACADEMY
IN REALITY...
I 1 2 3 4 5 6 7
Ifbase address of array is 1000
NESO ACADEMY
IN REALITY..
I 7
1 2 3 4 5 6
Number
If baseaddress of array is 1000
of bytes
in
4
NESO ACADEMY
UNDEFINED BEHAVIOURS
int main() {
}
int i =
;
10;
int *p = &i;
printf("%d",
return
*(p+3));
Different outputs everytime
NESO ACADEMY
UNDEFINED BEHAVIOURS
Undefined Behaviour
int main() {
Online:
int a[] {1, 2, 3, 4};
int b[] = {10, 20, 30, 40}; 7
int *p = &a[0];
int *q = &b[3];
Offine:
printf("%d", q - p);
return 0;
}
NESO ACADEMY