Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Computer Programming
Dr. Deepak B Phatak
Dr. Supratik Chakraborty
Department of Computer Science and Engineering
IIT Bombay
Session: Introduction to Pointers Part 1
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
int main()
{
int a;
float b;
char c;
// Rest of code
}
MEMORY
IIT Bombay
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
STACK SEGMENT
MEMORY
IIT Bombay
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
MEMORY
IIT Bombay
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
MEMORY
IIT Bombay
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
10
Memory Address
0x00104
0x00200 0x00203
STACK SEGMENT
MEMORY
IIT Bombay
0x00402 0x00405
// Rest of code
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
CODE SEGMENT
MAIN
DATA SEGMENT
11
STACK SEGMENT
0x00402 0x00405
DATA SEGMENT
Accessing memory
locations by names
CODE SEGMENT
MAIN
int main()
{
int a;
float b;
char c;
cin >> a;
cin >> c;
b = (a + c)/2.0;
return 0;
}
Memory Address
MEMORY
IIT Bombay
12
???
0x00104
0x00200 0x00203
STACK SEGMENT
0x00402 0x00405
DATA SEGMENT
Can we access
memory locations by
their addresses?
CODE SEGMENT
MAIN
int main()
{
int a;
float b;
char c;
cin >> a;
cin >> b;
c = (a + b)/2;
}
Memory Address
MEMORY
IIT Bombay
13
???
0x00104
0x00200 0x00203
STACK SEGMENT
0x00402 0x00405
DATA SEGMENT
MAIN
int main()
{
int a;
float b;
char c;
cin >> a;
cin >> b;
c = (a + b)/2;
}
Memory Address
MEMORY
IIT Bombay
14
15
Pointer as a Type
IIT Bombay
16
MAIN
Memory Address
MEMORY
IIT Bombay
17
STACK SEGMENT
DATA SEGMENT
CODE SEGMENT
MAIN
Memory Address
int main()
0x00104
{
0x00200 int a;
0x00203
float b;
0x00402 char c;
0x00405
int * ptrA;
0x0040a ptrA = &a;
0x0040d
// Rest of code
}
MEMORY
IIT Bombay
18
MAIN
Memory Address
int main()
0x00104
{
STACK SEGMENT
0x00200
int a;
0x00203
float b;
0x00402 char c;
0x00405
int * ptrA;
0x0040a ptrA = &a;
0x0040d
DATA SEGMENT
// Rest of code
What is the value assigned CODE
to ptrA
?
SEGMENT
}
0x00402, 0x00403, 0x00404 or 0x00405 ?
MEMORY
IIT Bombay
19
MAIN
Memory Address
int main()
0x00104
{
STACK SEGMENT
0x00200
int a;
0x00203
float b;
0x00402 char c;
0x00405
int * ptrA;
0x00402
0x0040a ptrA = &a;
0x0040d
DATA SEGMENT
// Rest of code
What is the value assigned CODE
to ptrA
?
SEGMENT
} 0x00402: Address of first among bytes allocated for a
MEMORY
IIT Bombay
20
MAIN
Memory Address
int main()
0x00104
{
STACK SEGMENT
0x00200
int a;
0x00203
float b;
0x00402 char c;
0x00405
int * ptrA;
0x00402
0x0040a ptrA = &a;
0x0040d
DATA SEGMENT
// Rest of code
Content/Value of ptrA: 0x00402
CODE SEGMENT
}
Address of ptrA: 0x0040a
MEMORY
IIT Bombay
21
22
int main()
{
Types of x, y and z: int
int x, y, z;
int *a, b, *c;
// Rest of code
}
23
int main()
{
Type of a: pointer to int
int x, y, z;
Type of c: pointer to int,
int *a, b, *c;
not pointer to pointer to int
// Rest of code
}
Type of b: int,
not pointer to int
24
int main()
{
int a; float b; char c;
int * ptrA; float * ptrB; char * ptrC;
ptrA = &a; cout << Address of a is: << ptrA;
ptrB = &b; cout << Address of b is: << ptrB;
ptrC = &c; cout << Address of c is: << ptrC;
return 0;
Compile and run this program
}
25
int main()
{
int a; float b; char c;
int * ptrA; float * ptrB; char * ptrC;
ptrA = &a; cout << Address of a is: << ptrA;
ptrB = &b; cout << Address of b is: << ptrB;
ptrC = &c; cout << Address of c is: << ptrC;
return 0;
What do we do with these addresses?
}
26
Summary
IIT Bombay
27