Professional Documents
Culture Documents
Computer Programming
Dr. Deepak B Phatak
Dr. Supratik Chakraborty
Department of Computer Science and Engineering
IIT Bombay
Session: Structures and Pointers Part 2
Acknowledgment
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
int main()
{ struct Driver {char name[50]; int id;};
struct Taxi {int id; Driver *drv;};
Driver d1; Taxi t1;
Rest of code
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
int main()
{ struct Driver {char name[50]; int id;};
struct Taxi {int id; Driver *drv;};
Driver d1; Taxi t1;
Rest of code
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
Member type:
Pointer-to-Driver
Assume requires
32 bits of storage
7
STACK SEGMENT
name
id
MEMORY
IIT Bombay
Rest of code
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
STACK SEGMENT
name
id
id
drv
MEMORY
IIT Bombay
Rest of code
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
STACK SEGMENT
name: Shekhar
id: 23
id
drv
MEMORY
IIT Bombay
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
10
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
Address
(in hex)
230
STACK SEGMENT
name: Shekhar
id: 23
id: 12
drv: 0x230
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct Taxi {int id; Driver *drv;};
Driver d1; Taxi t1;
d1 = {Shekhar, 23};
t1.id = 12; t1.drv = &d1;
Rest of code
MEMORY
IIT Bombay
11
return 0;
DATA SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
12
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi next;
};
13
member of type
Pointer-to-LinkedTaxi
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;
};
14
STACK SEGMENT
d1
name
id
d2
name
id
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driverv d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
15
STACK SEGMENT
d1
t1
d2
t2
name
id
id
drv
next
name
id
id
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
16
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id
drv
next
name
id
id
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
17
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id
drv
next
name: Abdul
id: 34
id
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
18
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id: 12
drv
next: 0x0
name: Abdul
id: 34
id
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
19
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id: 12
drv
next: 0x0
name: Abdul
id: 34
id: 11
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
20
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id: 12
drv
next: 0x0
name: Abdul
id: 34
id: 11
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
Driver d1, d2; LinkedTaxi t1, t2;
d1 = {Shekhar, 23};
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
21
STACK SEGMENT
d1
t1
d2
t2
name: Shekhar
id: 23
id: 12
drv
next: 0x0
name: Abdul
id: 34
id: 11
drv
next
DATA SEGMENT
CODE SEGMENT
MAIN
int main()
{ struct Driver {char name[50]; int id;};
struct LinkedTaxi {
int id; Driver *drv;
LinkedTaxi *next;};
DriverProgram
d1, d2; Taxi output:
t1, t2;
d1 = {Shekhar, 23};
Shekhar
d2 = {Abdul, 34};
t1.id = 12; t1.drv = &d1; t1.next = NULL;
t2.id = 11; t2.drv = &d2; t2.next = &t1;
cout << (t2.next)->drv->name; return 0;
}
MEMORY
IIT Bombay
22
myPtr
myArray
Some code
DATA SEGMENT
CODE SEGMENT
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
MAIN
STACK SEGMENT
MEMORY
23
myPtr
myArray
Some code
if (myPtr != NULL) delete myPtr;
DATA SEGMENT
CODE SEGMENT
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
MAIN
STACK SEGMENT
MEMORY
24
Some code
if (myPtr != NULL) delete myPtr;
if (myArray != NULL)
delete [] myArray;
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
myPtr
myArray
DATA SEGMENT
CODE SEGMENT
MAIN
STACK SEGMENT
MEMORY
25
Some code
if (myPtr != NULL) delete myPtr;
if (myArray != NULL)
delete [] myArray;
STACK SEGMENT
myDrvPtr
myDrvArray
name
id
name
id
name
id
MAIN
MEMORY
DATA SEGMENT
CODE SEGMENT
26
Some code
if (myDrvPtr != NULL) delete myDrvPtr;
if (myArray != NULL)
delete [] myArray;
STACK SEGMENT
myDrvPtr
myDrvArray
name
id
name
id
MAIN
MEMORY
DATA SEGMENT
CODE SEGMENT
27
Some code
if (myDrvPtr != NULL) delete myDrvPtr;
if (myDrvArray != NULL)
delete [] myDrvArray;
STACK SEGMENT
myDrvPtr
myDrvArray
MAIN
MEMORY
DATA SEGMENT
CODE SEGMENT
28
29
30
Summary
IIT Bombay
31