Pointers in Computing

ESC101: 
Fundamentals of 
Computing
Introduction to 
Pointers
Nisheeth
The sizeof various variable types
 
 
8 bits     make a byte
 
char takes 1 byte = 8 bits
 
Max value in a char is 127 = 2
(8 – 1)
-1
 
 
int/float takes 4 bytes = 32 bits
 
Max value in int is 2,147,483,647
equal to 2
(32 – 1)
-1 – verify
 
long/double takes 8 bytes = 64 bits
 
Max value in long is 
9,223,372,036,854,775,807
equal to 2
(64 – 1)
-1 – verify
2
 
=
 
=
 
=
Why is max value for all these
variables always 2
(k – 1)
-1 and not 2
k 
-1
when there are k bits getting used?
Because, for signed
variables, one bit is
reserved for storing the sign
How Mr C stores variables
 
 
He has a very long chain of bytes
 
Each byte has a non-negative 
"address”
 
Each address (which is also a number) is stored
 
using 8 bytes (=64 bits)
 
Some addresses are reserved for Mr. C
 
Others can be used by us for variables, e.g.,
 
 
 
3
 
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
2
0
0
0
0
0
3
0
0
0
0
0
4
0
0
0
0
0
5
0
0
0
0
0
6
0
0
0
0
0
7
0
0
0
0
0
8
0
0
0
0
0
9
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
2
0
0
0
0
1
3
0
0
0
0
1
4
0
0
0
0
1
5
0
0
0
0
1
6
0
0
0
0
1
7
0
0
0
0
1
8
0
0
0
0
1
9
0
0
0
0
2
0
 
char c;      // stored at 000004
 
int a
;         // stored at 000005
 
double d
;  // stored at 000009
So there can be a total 2
64
-1
possible addresses in memory
Controlling/managing memory
4
Pointers
 
 
A pointer is just an address and needs 8 bytes to store
 
 
Pointers enable us to store/manage memory addresses
 
 
In some sense Mr C manages a ridiculously huge array!
 
 
Pointers can allow us to write very beautiful code but it is
a very powerful tool – misuse it and you may suffer 
5
Our first pointer
 
HOW WE SPEAK TO MR. COMPILER
 
#include <stdio.h>
 
int main(){
 
  int a = 42;
 
  
int *
ptr;
 
  ptr = &a;
 
  printf("%d", *ptr);
 
  return 0;
 
}
 
HOW WE USUALLY SPEAK TO A HUMAN
 
a is an int variable, value 42
 
ptr is a pointer that will store
address to an int variable
 
Please store address of a in ptr
 
Please print the value of the int
stored at the address in ptr
6
 
a
 
ptr
 
42
 
000023
 
000023
 
000027
Whew!
Lets begin.
int *
ptr;
means ptr
is a 
pointer
to an
integer
a is stored at internal
location 000023
int takes 4 bytes
to store
Can also have pointes to
char, long, float, double
All these envelope-like
boxes take 8 bytes
42
Pointers with printf and scanf
 
 
Pointers contain addresses, so to print the address itself,
use the %ld format since addresses are 8 byte long
 
To print value at an address given by a pointer, first
dereference
 the pointer using * operator
 
 
Scanf requires the address of the variable where input is
to be stored. Can pass it the referenced address
 
 
or else pass it a pointer
7
 
printf("%d", *ptr);
 
scanf("%d", &a);
 
scanf("%d", ptr);
Pointers
 
 
Can have pointers to a char variable, int variable, long
variable, float variable, double variable
 
Can have pointers to arrays of all kinds of variables
 
All pointers stored internally as 8 byte non-negative integers
 
NULL pointer – one that stores address 00000000
 
Named constant 
NULL can be used to check if a pointer is NULL
 
Do not confuse with NULL character '\0' – that has a valid ASCII value 0
 
NULL character 
is actually used 
to indicate that string is over
 
WARNING: NULL pointers may be returned by some string.h functions e.g. strstr
 
Do not try to read from/write to address 00000000
 
Reserved by Mr C or else the operating system
 
Doing so will cause a segfault and crash your program/even your computer
8
Pointers and Arrays
9
 
int a[6] = {3,7,6,2,1,0};
 
How many boxes in memory will be created for the above
d
e
c
l
a
r
a
t
i
o
n
 
+
 
i
n
i
t
i
a
l
i
z
a
t
i
o
n
?
 
S
E
V
E
N
 
 3
 
 7
 
 6
 
 2
 
 1
 
 0
 
a[0]
 
a[1]
 
a[2]
 
a[3]
 
a[4]
 
a[5]
 
a
 
000017
 
000025
 
000029
 
000033
 
000037
 
000041
 
000045
 
000025
 
Name of box
 
Address of box
 
In case of arrays, the 
name
 of the array is the 
pointer to the first element 
of the array
 
Also note that a and a[0] need not be at adjacent addresses in memory (but often are)
Pointers and Arrays
 
 
If we declare an array, a sequence of
addresses get allocated
 
 
 
Names c and a are actually pointers, c stores
the address of c[0], a stores address of a[0]
 
c[0] is stored at address 000005, c[1] at
address 000006, c[2] at 000007 and so on
 
a[0] is stored at address 000011, a[1] at
address 000015 (int takes 4 bytes), a[2] at
address 000019, and so on
 
 
 
 
10
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
2
0
0
0
0
0
3
0
0
0
0
0
4
0
0
0
0
0
5
0
0
0
0
0
6
0
0
0
0
0
7
0
0
0
0
0
8
0
0
0
0
0
9
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
2
0
0
0
0
1
3
0
0
0
0
1
4
0
0
0
0
1
5
0
0
0
0
1
6
0
0
0
0
1
7
0
0
0
0
1
8
0
0
0
0
1
9
0
0
0
0
2
0
0
0
0
0
2
1
0
0
0
0
2
2
0
0
0
0
2
3
 
char c[5];
 
int a[3];
 
c
c
[
0
]
c
[
1
]
c
[
2
]
c
[
3
]
c
[
4
]
 
0
 
 
 
0
 
 
 
 
0
 
 
 
0
 
 
 
 
0
 
 
 
1
 
 
 
 
0
 
 
 
 
1
 
0
 
 
 
0
 
 
 
 
0
 
 
 
0
 
 
 
 
1
 
 
 
 
0
 
 
 
1
 
 
 
 
1
Note: Though figure shows
 them 
as taking one byte,
actually, being pointers (addresses), c and a each
would take 
8 bytes 
to store
 
a
a
[
0
]
a
[
1
]
a
[
2
]
c is pointer, the whole c[5] denotes the array
    a is pointer, the whole a[3] denotes the array
Slide Note
Embed
Share

Exploring the concept of pointers in computing, this content delves into the fundamentals of storing memory addresses, the size of variable types, managing memory, and utilizing pointers effectively. It discusses how pointers are used to store memory addresses and provides examples of pointer usage in programming. The importance of handling pointers carefully to prevent misuse and potential issues is highlighted throughout the content.

  • Pointers
  • Computing Fundamentals
  • Memory Management
  • Variable Types

Uploaded on Sep 23, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Introduction to Pointers ESC101: Fundamentals of Computing Nisheeth

  2. The sizeof various variable types 8 bits make a byte char takes 1 byte = 8 bits Max value in a char is 127 = 2(8 1)-1 = Because, for signed variables, one bit is reserved for storing the sign int/float takes 4 bytes = 32 bits Max value in int is 2,147,483,647 equal to 2(32 1)-1 verify = Why is max value for all these variables always 2(k 1)-1 and not 2k -1 when there are k bits getting used? long/double takes 8 bytes = 64 bits Max value in long is 9,223,372,036,854,775,807 equal to 2(64 1)-1 verify = ESC101: Fundamentals of Computing

  3. How Mr C stores variables He has a very long chain of bytes Each byte has a non-negative "address Each address (which is also a number) is stored using 8 bytes (=64 bits) Some addresses are reserved for Mr. C Others can be used by us for variables, e.g., char c; // stored at 000004 int a; // stored at 000005 double d; // stored at 000009 000000 000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 So there can be a total 264-1 possible addresses in memory ESC101: Fundamentals of Computing

  4. Controlling/managing memory ESC101: Fundamentals of Computing

  5. Pointers A pointer is just an address and needs 8 bytes to store Pointers enable us to store/manage memory addresses In some sense Mr C manages a ridiculously huge array! Pointers can allow us to write very beautiful code but it is a very powerful tool misuse it and you may suffer ESC101: Fundamentals of Computing

  6. Our first pointer Whew! Lets begin. 42 HOW WE USUALLY SPEAK TO A HUMAN HOW WE SPEAK TO MR. COMPILER int *ptr; means ptr is a pointer to an integer a is an int variable, value 42 ptr is a pointer that will store address to an int variable Please store address of a in ptr Please print the value of the int stored at the address in ptr boxes take 8 bytes #include <stdio.h> int main(){ int a = 42; int *ptr; ptr = &a; printf("%d", *ptr); return 0; } Can also have pointes to char, long, float, double 42 000023 All these envelope-like 000023 000027 a ptr a is stored at internal location 000023 int takes 4 bytes to store ESC101: Fundamentals of Computing

  7. Pointers with printf and scanf Pointers contain addresses, so to print the address itself, use the %ld format since addresses are 8 byte long To print value at an address given by a pointer, first dereference the pointer using * operator printf("%d", *ptr); Scanf requires the address of the variable where input is to be stored. Can pass it the referenced address scanf("%d", &a); or else pass it a pointer scanf("%d", ptr); ESC101: Fundamentals of Computing

  8. Pointers Can have pointers to a char variable, int variable, long variable, float variable, double variable Can have pointers to arrays of all kinds of variables All pointers stored internally as 8 byte non-negative integers NULL pointer one that stores address 00000000 Named constant NULL can be used to check if a pointer is NULL Do not confuse with NULL character '\0' that has a valid ASCII value 0 NULL character is actually used to indicate that string is over WARNING: NULL pointers may be returned by some string.h functions e.g. strstr Do not try to read from/write to address 00000000 Reserved by Mr C or else the operating system Doing so will cause a segfault and crash your program/even your computer ESC101: Fundamentals of Computing

  9. Pointers and Arrays int a[6] = {3,7,6,2,1,0}; How many boxes in memory will be created for the above declaration + initialization? SEVEN SEVEN 7 2 1 0 3 6 000025 a[0] a[1] a[2] a[3] a[4] a[5] 000045 a Name of box 000017 000025 000041 000029 000033 000037 Address of box In case of arrays, the name of the array is the pointer to the first element of the array Also note that a and a[0] need not be at adjacent addresses in memory (but often are) ESC101: Fundamentals of Computing

  10. Pointers and Arrays If we declare an array, a sequence of addresses get allocated char c[5]; int a[3]; Note: Though figure shows them as taking one byte, actually, being pointers (addresses), c and a each would take 8 bytes to store 000000 000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021 000022 000023 0 0 0 0 0 1 0 1 c c[0] c[1] c[2] c[3] c[4] c is pointer, the whole c[5] denotes the array a is pointer, the whole a[3] denotes the array a 0 0 0 0 1 0 1 1 a[0] Names c and a are actually pointers, c stores the address of c[0], a stores address of a[0] c[0] is stored at address 000005, c[1] at address 000006, c[2] at 000007 and so on a[0] is stored at address 000011, a[1] at address 000015 (int takes 4 bytes), a[2] at address 000019, and so on a[1] a[2] ESC101: Fundamentals of Computing

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#