Beruflich Dokumente
Kultur Dokumente
Computer Programming
Dr. Deepak B Phatak
Dr. Supratik Chakraborty
Department of Computer Science and Engineering
IIT Bombay
Session: Introduction to Pointers Part 2
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
MEMORY
IIT Bombay
0x02abc
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
DATA SEGMENT
CODE SEGMENT
MAIN
0x0040d
0x0040d
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
0x02abc
0x00402
DATA SEGMENT
CODE SEGMENT
MAIN
Memory Address
int main()
{
int a;
int * ptrA;
0x00402 0x00405
a = 0x02abc;
ptrA = &a;
0x0040a -
MEMORY
IIT Bombay
MEMORY
IIT Bombay
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
DATA SEGMENT
CODE SEGMENT
MAIN
0x0040d
STACK SEGMENT
0x02abc
0x00402
DATA SEGMENT
CODE SEGMENT
MAIN
Memory Address
int main()
{
int a;
int * ptrA;
0x00402 0x00405
a = 0x02abc;
ptrA = &a;
0x0040a cout << *ptrA; 0x0040d
// Rest of code
}
MEMORY
IIT Bombay
10
MAIN
Memory Address
int main()
Find content/value at address given by
{
value of ptrA
int a;
STACK SEGMENT
int * ptrA;
0x00402 0x02abc
0x00405
a = 0x02abc;
ptrA = &a;
0x0040a 0x00402
cout << *ptrA; 0x0040d
DATA SEGMENT
// Rest of code
CODE SEGMENT
}
MEMORY
IIT Bombay
11
MAIN
Memory Address
int main()
{ Find content/value at address 0x00402
int a;
STACK SEGMENT
int * ptrA;
0x00402 0x02abc
0x00405
a = 0x02abc;
ptrA = &a;
0x0040a 0x00402
cout << *ptrA; 0x0040d
DATA SEGMENT
// Rest of code
CODE SEGMENT
}
MEMORY
IIT Bombay
12
MAIN
Memory Address
int main()
{ How many bytes to read starting from
address 0x00402?
int a;
STACK SEGMENT
int * ptrA;
0x00402 0x02abc
0x00405
a = 0x02abc;
ptrA = &a;
0x0040a 0x00402
cout << *ptrA; 0x0040d
DATA SEGMENT
// Rest of code
CODE SEGMENT
}
MEMORY
IIT Bombay
13
MAIN
Address
int Since
main()ptrA isMemory
a pointer
to int , its value is
address of an integer (4 bytes),
{
intso
a; read 4 bytes starting from 0x00402
STACK SEGMENT
int * ptrA;
0x00402 0x02abc
0x00405
a = 0x02abc;
ptrA = &a;
0x0040a 0x00402
cout << *ptrA; 0x0040d
DATA SEGMENT
// Rest of code
CODE SEGMENT
}
MEMORY
IIT Bombay
14
STACK SEGMENT
0x02abc
0x00402
DATA SEGMENT
CODE SEGMENT
MAIN
Memory Address
int main()
Read 0x02abc and print it
{
int a;
int * ptrA;
0x00402 0x00405
a = 0x02abc;
ptrA = &a;
0x0040a cout << *ptrA; 0x0040d
// Rest of code
}
MEMORY
IIT Bombay
15
16
int main()
Memory Address
{ char c;
0x00302
char * ptrC;
0x00402 char ** ptrPtrC;
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
17
int main()
Memory Address
{ char c;
0x00302
char * ptrC;
0x00402 char ** ptrPtrC;
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
0x00302
18
int main()
Memory Address
{ char c;
0x00302
char * ptrC;
0x00402 char ** ptrPtrC;
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
0x00302
0x00402
19
int main()
Memory Address
{ char c;
0x00302
char * ptrC;
0x00402 char ** ptrPtrC;
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
0x00030
0x00302
0x00402
20
int main()
Memory Address
{ char c;
0x00302
char * ptrC;
0x00402 char ** ptrPtrC;
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
0x00030
0x00302
0x00402
21
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
What is the value of *ptrPtrC ?
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
22
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
return 0;
ptrPtrC has value 0x00402
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
23
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
*ptrPtrC has value
return 0;
content of memory at address 0x00402
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
24
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
Content at address 0x00402:
return 0;
How many bytes to read?
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
25
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
How many bytes to read?
return 0;
ptrPtrC is pointer to what data type?
}
pointer (4 bytes)
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
26
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
To get *ptrPtrC, read 4 bytes
return 0;
starting from address 0x00402
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
27
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
*ptrPtrC has value 0x00302
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
28
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
What is * (*ptrPtrC) ?
return 0;
content of memory at address 0x00302
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
29
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
Content at address 0x00302:
return 0;
How many bytes to read?
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
30
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
How many bytes to read?
return 0;
*ptrPtrC is pointer to what data type?
}
char (1 byte)
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
31
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
To get *(*ptrPtrC), read 1 byte
return 0;
starting from address 0x00302
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
32
int main()
Memory Address
STACK SEGMENT
{ char c;
0x00302
0x00030
char * ptrC;
0x00402 char ** ptrPtrC;
0x00302
0x00405
ptrC = &c;
ptrPtrC = &ptrC;
0x0040a 0x00402
cin >> c;
0x0040d
cout << *(*ptrPtrC);
*(*ptrPtrC) has value 0x00030
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
33
No pre-specified limit
If x is a variable of type int ****, we can use upto four
levels of dereferencing of x
34
35
Summary
IIT Bombay
36