30 › ... › pi_cse30_lecture_2_c_after.pdftwo important facts about pointers 1) a pointer can...
TRANSCRIPT
![Page 1: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/1.jpg)
Lecture'3:'''''''''''''''''''''C'Programming''CSE'30'
1
![Page 2: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/2.jpg)
C'Programming'
• 'Procedural'thought'process'• 'No'built'in'object'abstractions'
• data'separate'from'methods/functions'
• Low'memory'overhead'compared'to'Java'• No'overhead'of'classes''• Relatively'fast'
• Heap'memory'management'manual''• Pointers'to'manipulate'shared'data'
2
![Page 3: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/3.jpg)
The'C'runtime'environment'
3
![Page 4: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/4.jpg)
Steps'in'program'translation'
Program in C Helloworld.c
Code%Time%
Program:%Text'Gile'stored'on''
computers'hard'disk'or'
some'secondary'storage'
Compile%Time%
Compiler Hardware
Executable:%Program'in'machine'code'
+Data'in'binary'
1000110001100010000000000000000'
1000110011110010000000000000100'
1010110011110010000000000000000'
1010110001100010000000000000100'
Run%Time%
![Page 5: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/5.jpg)
What'does'gcc'do?'
%''gcc'hello.c'
5
![Page 6: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/6.jpg)
What'does'gcc'do?'
%''gcc'hello.c'
hello.c'
gcc'
a.out'
6
![Page 7: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/7.jpg)
What'does'gcc'do?'
%''gcc'hello.c'
hello.c'
gcc'
a.out'
7
“Source”%Program%in%C%
'#include'<stdio.h>'
void'func1(int'a,'char'*b)'
{''
'''''if(a'>'0)'
'''''{''*b'='�a�;'}'}'
int'main()'
{…..'
'''func1();'
''''printf(“\abc”);'
}'
![Page 8: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/8.jpg)
What'does'gcc'do?'
%''gcc'hello.c'
hello.c'
gcc'
a.out'
8
“Source”%Program%in%C%
#include'<stdio.h>'
void'func1(int'a,'char'*b)'
{''
'''''if(a'>'0)'
'''''{''*b'='�a�;'}'}'
int'main()'
{…..'
'''func1();'
''''printf(“\abc”);'
}'
“Executable”:%Equivalent%program%in%machine%language%
0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111 !
![Page 9: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/9.jpg)
What'does'gcc'do?'
%''gcc'hello.c'
%'./a.out''''(executable'loaded'in'memory'and'processed)'
'''''''''''''''''''''''Also'referred'to'as'“running”'the'C'program'
hello.c'
gcc'
a.out'
9
“Source”:%Program%in%C% “Executable”:%Equivalent%program%in%machine%language%
![Page 10: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/10.jpg)
How is ‘other’ code included? • Include Header files (.h) that contain function
declarations - the function interface • The corresponding .c files contain the actual code
void'func1(int,'char'*);'
int'func2(char'*,'char'*);'
hello.h '
#include'<stdio.h>'
void'func1(int'a,'char'*b)'
{''
'''''if(a'>'0)'
'''''{''*b'='�a�;'}'}'
int'main()'
{…..'
'''func1();'
''''printf(“\abc”);'
}'
hello.c
10
![Page 11: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/11.jpg)
Manipulating*data*objects*in*C*
11
![Page 12: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/12.jpg)
How'we'manipulate'variables'depends'
on'their'data3type'Dataatypes'
Basic:'int,'char,'Gloat'
'
Derived:'Pointers'
Arrays'
Structures'
enumerations'
'
12
![Page 13: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/13.jpg)
In'C,'a'variable'is'declared'by'
A. using'it'in'an'arithmetic'expression''
B. preceding'it'with'one'or'more'keywords'to'indicate'its'‘data'type’','e.g.'char'c;''
C. initializing'it'to'a'value'
13
![Page 14: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/14.jpg)
Basic'data'object'in'memory''
A'region'in'memory'that'contains'a'value'and'is'
associated'with'a'name/identiGier'
'
20%102%
num%4%bytes%
14
![Page 15: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/15.jpg)
Basic'data'object'in'memory''
A'region'in'memory'that'contains'a'value'and'is'
associated'with'a'name/identiGier'
'Attributes'of'a'Dataaobject/variable:'
a Name/identiGier'
a Value'
a Address:'Location'in'memory'
a Size'
a A'unique'data3type*a Lifetime'
a Scope'
20%102%
num%4%bytes%
15
![Page 16: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/16.jpg)
Declarations'and'deGinitions'
• !char!c=‘a’;!!!!!! !/*!1!byte!*/!• !short!s;!!!!!!!!! !/*!2!bytes!*/!• !int!a;!!!!!!!!!!!/*'usually'4'bytes''a'signed'*/'• !unsigned!int!a=0;!/*'usually'4'bytes*/'• !float!f;!!!!!!!!/*'usually'4'bytes'use'sizeof(Gloat)*/'
!!
16
![Page 17: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/17.jpg)
Can'we'change'the'location'of'a'
variable'after'it'is'declared?'
A. Yes'
B. No'
17
![Page 18: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/18.jpg)
Accessing'value,'Lvalue'and'Rvalue'
• To'access/change'the'value'of'a'basic'type:'y=x;!x=10;!y=!x>y!?!x!:!y;!
20%102%
x%
18
![Page 19: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/19.jpg)
Accessing''location'
To'access'the'location/address,'use'the'address'operator'‘&’'
!!&x!!(is!102)!
20%102%
x%
19
![Page 20: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/20.jpg)
Pointers'
• Pointer: A variable that contains the address of a variable
' int *x;
20
![Page 21: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/21.jpg)
Pointers'
• Pointer: A variable that contains the address of a variable
' int *x, y; x" y"
y = 3;
x = &y;
102% 120%
21
![Page 22: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/22.jpg)
Pointers'
• Pointer: A variable that contains the address of a variable
' int *x, y; x" ?" y" ?"
y = 3;
x" ?" y" 3"x = &y;
x" 120! y" 3"
102% 120%
102% 120%
102% 120%
x points'to'y'22
sizeof(x)=
![Page 23: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/23.jpg)
Pointer'Diagrams'
x" 120! y" 3"102% 120%
23
• Short'hand'diagram'for'the'following'scenario'
![Page 24: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/24.jpg)
Using pointers to change the value of a variable
Use dereference * operator to left of pointer name
x" y" 3"
*x = 5;
x" y" 3"
24
![Page 25: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/25.jpg)
x" y" 5"*x = 5;
x" y" 3"
! Two ways of changing the value of any variable ! Why this is useful will be clear when we discuss
functions and pointers
25
![Page 26: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/26.jpg)
Pointers'and'Pointees'
Q:'Which'of'the'following'pointer'diagrams'best'
represents'the'outcome'of'the'above'code?'''
int!*p1,!*p2,!x;!p1!=!&x;!p2!=!p1;!
26
A.'
x"B.'
x"
C.''Neither,'the'code'is'incorrect'
![Page 27: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/27.jpg)
Pointer'and'Pointee'data'types'Q:'This'code'gives'a'warning'at'compile'time.'Why?'
A. The'pointer'‘p’'is'made'to'point'to'a'variable'of'incompatible'type'
B. *p'does'not'contain'a'valid'value'because'y*was'not'initialized'
!!!!!char!*p;!!!!int!y!=10000;!!!!p!=!&y;!!
27
![Page 28: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/28.jpg)
Q:'Does'the'following'code'give'an'error'at'run'time?'
A. Yes'B. No'
!int!*p;!!!!*p!=!5;!!!!!
28
![Page 29: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/29.jpg)
Q:'What'is'the'output'of'this'code?'
A. The'value'pointed'to'by'p,'which'is'5'B. The'value'pointed'to'by'p'plus'one,'which'is'6'C. UndeGined'
!int!*p,!x!=!5;!!!!printf(“%d”,(*p)++);!!
29
![Page 30: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/30.jpg)
Two important facts about Pointers
1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another pointer, etc
2) After declaring a pointer: int *ptr; ptr doesn’t actually point to anything yet. We can either:
" make it point to something that already exists, or " allocate room in memory for something new that it will
point to… (next lecture)
30
![Page 31: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/31.jpg)
Array'Basics''
31
ar% 100 104 108 112 116 "
! int ar[5]; // declares a 5-element integer array
![Page 32: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/32.jpg)
Array'Basics''
32
ar% 100 104 108 112 116 "
int ar[5]; // declares a 5-element integer array
int ar[] = {795, 635}; //declares and fills a 2-element integer array.
![Page 33: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/33.jpg)
Array'Basics''
33
ar% 100 104 108 112 116 "
20'
! Accessing elements: ar[i];// returns the ith element
! How are arrays in C different from Java? ! Pointers and arrays are very similar
![Page 34: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/34.jpg)
Arrays'and'Pointers'
! ar is a pointer to the first element ! ar[0] is the same as *ar ! ar[2] is the same as *(ar+2)
ar% 100 104 108 112 116 "
20'
![Page 35: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/35.jpg)
Arrays'and'Pointers'
! Use pointers to pass arrays to functions ! Use pointer arithmetic to access arrays more
conveniently
ar% 100 104 108 112 116 "
20'
![Page 36: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/36.jpg)
Pointer Arithmetic ! Since a pointer is just a memory address, we can add to it to
traverse an array. ! ptr+1 will return a pointer to the next array element.
100 104 108 112 116 "20'
ptr%40' 60'
![Page 37: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/37.jpg)
Pointer Arithmetic
! *ptr+1 = ? ! *ptr++ = ? ! *(ptr+1)=?
100 104 108 112 116 "20'
ptr%40' 60'
A. 21, 20, 40 B. 21, 21, 40 C. 21, 40, 40
![Page 38: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/38.jpg)
Memory'
Arrays: Fast data access ! Using pointer arithmetic, easy to compute the address of any
array element in memory ! How are array elements accessed on an ARM?
100 104 108 112 116 "20'
ptr%40' 60'
register'
Base%address%(100)%
Processor'
Address'
Data'
![Page 39: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/39.jpg)
Memory'
Restrictions on memory access ! Not all of memory is accessible by your program
100 104 108 112 116 "20'
ptr%40' 60'
register'
Base%address%(100)%
Processor'
Address'
Data'
![Page 40: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/40.jpg)
Q:'Which'of'the'assignment'statements'produces'an'
error'at'compilation.'Why?'
!i)!p=ar+5;!!ii)ar=p+1;!!!
ar% 100 104 108 112 116 "20'p%
int!*p,!ar[5];!!//Declaration!
A. p=ar+5;!B. ar=p+1;!!C. Both'statements'result'in'error'at'compile'time'D. Neither'results'in'a'compilation'error'
![Page 41: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/41.jpg)
Q:'What'happens'when'the'following'code'is'executed?'
A. Always'results'in'a'segmentation'fault'because'a'pointer'cannot'be'used'to'change'the'value'of'an'array'element'
B. Always'results'in'a'segmentation'fault'because'the'array'element'being'accessed'is'out'of'bounds'
C. Likely'to'result'in'a'segmentation'fault'because'the'memory'location'being'accessed'may'not'be'a'valid'
address'
D. It'results'in'a'compilation'error'
int!*p,!ar[5];!!//Declaration!p=arP5;!*p=0;!!!
![Page 42: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/42.jpg)
Arrays ! Pitfall: An array in C does not know its own length,
& bounds not checked! ! Consequence: We can accidentally access off
the end of an array. ! Consequence: We must pass the array and its
size to a procedure which is going to traverse it. ! Segmentation faults and bus errors:
! These are VERY difficult to find, so be careful.
![Page 43: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/43.jpg)
Pointer Arithmetic ! What if we have an array of large structs (objects)? ! C takes care of it: In reality, ptr+1 doesn’t add 1
to the memory address, but rather adds the size of the array element.
! C knows the size of the thing a pointer points to – every addition or subtraction moves that many bytes: 1 byte for a char, 4 bytes for an int, etc.
![Page 44: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/44.jpg)
Pointer Arithmetic Question
How'many'of'the'following'are'invalid?'
I. pointer'+'integer'(ptr+1)'
II. integer'+'pointer'(1+ptr)'
III. pointer'+'pointer'(ptr'+'ptr)'
IV. pointer'–'integer'(ptr'–'1)'
V. integer'–'pointer'(1'–'ptr)'
VI. pointer'–'pointer'(ptr'–'ptr)'
VII. compare'pointer'to'pointer'(ptr'=='ptr)'
VIII. compare'pointer'to'integer'(1'=='ptr)'IX. compare'pointer'to'0'(ptr'=='NULL)'
X. compare'pointer'to'NULL'(ptr'=='NULL)'
#invalid A: 1 B: 2 C: 3 D: 4 E: 5
![Page 45: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/45.jpg)
Pointer Arithmetic Question
#invalid A: 1 B: 2 C: 3 D: 4 E: 5
How'many'of'the'following'are'invalid?'
I. pointer'+'integer'(ptr+1)'
II. integer'+'pointer'(1+ptr)'
III. pointer'+'pointer'(ptr'+'ptr)'
IV. pointer'–'integer'(ptr'–'1)'
V. integer'–'pointer'(1'–'ptr)'
VI. pointer'–'pointer'(ptr'–'ptr)'
VII. compare'pointer'to'pointer'(ptr'=='ptr)'
VIII. compare'pointer'to'integer'(1'=='ptr)'IX. compare'pointer'to'0'(ptr'=='NULL)'
X. compare'pointer'to'NULL'(ptr'=='NULL)'
![Page 46: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/46.jpg)
Functions:**Breaking*large*computing*tasks*to*
smaller*ones*
46
![Page 47: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/47.jpg)
C'Programming'
• 'Procedural'thought'process'main!()!/*!High!level!Outline!*/!{!!!.!.!.!!!get_input(arg1)!/*Comment:!Step!1!*/!!!perform_step_2(arg2);!!!!perform_step_3();!!!store_result();!/*!Print!output!or!store!in!a!file!*/!!}!
' 47
![Page 48: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/48.jpg)
Overview'of'Functions'
Functions'make'code'easy'to''
! Maintain'! Debug'! Reuse' 48
![Page 49: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/49.jpg)
Functions'Overview'
void!foo(int!x,!int!y);!!//Declaration*
49
![Page 50: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/50.jpg)
Functions'Overview'
void!foo(int!x,!int!y)!{!!!!int!tmp;!!!!tmp=!x;!!!!x=!y;!!!!y=!tmp;!!}!!
//De<inition*
foo'
x' y'
tmp'
50
What'does'foo'do?'
![Page 51: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/51.jpg)
Stack'Allocation:'Function'local'variables'and'
parameters'
51
• When'program'execution'starts'
Local'variables'of'main()'
Stack'Pointer'
What'if'main'calls'the'function'func()?'
Local'variables'of'func()'
Other'information'about'
func()'
![Page 52: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/52.jpg)
Stack'Allocation:'Function'local'
variables'and'parameters'
52
Local'variables'of'main()'
Stack'Pointer'
![Page 53: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/53.jpg)
Scope'
Variables'declared'within'a'function'can'be'
used:'
A. By'other'functions''
B. Only'within'the'function''
53
![Page 54: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/54.jpg)
Lifetime'of'data'
• Lifetime:'The'interval'between'time'of'creation'and'end'of'existence'of'data'
54
![Page 55: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/55.jpg)
Possible'lifetimes'of'data'
1. Execution'time'of'program'2. Time'between'explicit'creation'and'explicit'
deletion'
3. Execution'time'of'a'function'(time'between'function'call'and'function'return)'
*Variables'whose'lifetime'is'the'execution'time'of'
function'are'managed'using'the'stack'structure'
'
'
55
![Page 56: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/56.jpg)
Specifying'Scope'and'Lifetime'
Scope'and'lifetime'are'often'implicit'but'
sometimes'we'have'to'use'speciGic'keywords:'
'
• !static!int!a=0;!/*DeGines'lifetime*/'• !extern!int!a;!!/*Extends'scope'to'multiple'Giles*/'
!!
56
![Page 57: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/57.jpg)
Different'types'of'data'
What'factor'differentiates'the'following'three'
‘categories’'of'data'in'a'C'program:'
• Global'and'static'variables'• Local'variables'• Dynamic'variables'
A. Scope'B. Lifetime'C. Representation'
57
![Page 58: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/58.jpg)
Different'types'of'data'
What'factor'differentiates'the'following'three'
‘categories’'of'data'in'a'C'program:'
• Global'and'static'variables'• Local'variables'• Dynamic'variables'
A. Scope'B. Lifetime'C. Representation'
58
![Page 59: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/59.jpg)
Functions:'Call'by'value'
main()!{!!!.!.!.!!!swap(a,!b);!!!.!.!.!.!}!! swap'
x' y'
Q:'Are'the'value'of'variables'‘a’'and'‘b’'interchanged'after'
swap'is'called?'
'
A. Yes,'because'that’s'what'is'implemented'by'the'‘swap’'routine'
B. No,'because'the'inputs'to'swap'are'only'copies'of'‘a’'and'‘b’'
'
'
5' 6'a' b'
59
![Page 60: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/60.jpg)
Functions:'Call'by'value'
main()!{!!!.!.!.!!!swap(a,!b);!!!.!.!.!.!}!! swap'
x' y'
Q:'Are'the'value'of'variables'‘a’'and'‘b’'interchanged'after'
swap'is'called?'
'
A. Yes,'because'that’s'what'is'implemented'by'the'‘swap’'routine'
B. No,'because'the'inputs'to'swap'are'only'copies'of'‘a’'and'‘b’'
'
'
5' 6'a' b'
60
![Page 61: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/61.jpg)
Q:'Which'of'the'following'changes'are'required'to'
interchange'the'values'in'‘a’'and'‘b’'when'swap'is'called?'
{!.!.!.!.!!swap(a,!b);!}!!
5' 6'a' b'
swap'
x' y'
'
A. In'swap,'return'the'values'of'‘x’'and'‘y’'to'the'main'function'after'swapping'them'
B. Declare'‘a’'and'‘b’'as'global'variables,'so'that'they'become'accessible'to'the'swap'routine'
C. Pass'the'address'of'‘a’'and'‘b’'to'swap'instead'of'their'value'
D. Move'the'implementation'in'swap'to'the'main'function'''
61
![Page 62: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/62.jpg)
Q:'Which'of'the'following'changes'are'required'to'
interchange'the'values'in'‘a’'and'‘b’'when'swap'is'called?'
{!.!.!.!.!!swap(a,!b);!}!!
5' 6'a' b'
swap'
x' y'
'
A. In'swap,'return'the'values'of'‘x’'and'‘y’'to'the'main'function'after'swapping'them'
B. Declare'‘a’'and'‘b’'as'global'variables,'so'that'they'become'accessible'to'the'swap'routine'
C. Pass'the'address'of'‘a’'and'‘b’'to'swap'instead'of'their'value'
D. Move'the'implementation'in'swap'to'the'main'function'''
62
![Page 63: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/63.jpg)
Functions:'Call'by'reference'
Q:'What'should'the'modiGied'swap'function'do?'
'
A. Swap'the'addresses''in'‘x’'and'‘y’'
B. Swap'the'values'pointed'to'by'‘x’'and'‘y’'
C. Both'the'above'operations'are'equivalent''
void!swap(int!*x,!int!*y)!{!!!!.!.!.!}!!
63
![Page 64: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/64.jpg)
Functions:'Call'by'reference'
Q:'What'should'the'modiGied'swap'function'do?'
'
A. Swap'the'addresses''in'‘x’'and'‘y’'
B. Swap'the'values'pointed'to'by'‘x’'and'‘y’'
C. Both'the'above'operations'are'equivalent''
void!swap(int!*x,!int!*y)!{!!!!.!.!.!}!!
64
![Page 65: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/65.jpg)
Q: What happens when IncrementPtr(q)is called in the following code:
void IncrementPtr(int *p){ p = p + 1; }
50 60 70
A q int A[3] = {50, 60, 70}; int *q = A; IncrementPtr(q);'
A. The pointer ‘q’ points to the next element in the array with value 60
B. The pointer ‘q’ points to the first element in the array with value 50
![Page 66: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/66.jpg)
Q: What happens when IncrementPtr(q)is called in the following code:
void IncrementPtr(int *p){ p = p + 1; }
50 60 70
A q int A[3] = {50, 60, 70}; int *q = A; IncrementPtr(q);'
A. The pointer ‘q’ points to the next element in the array with value 60
B. The pointer ‘q’ points to the first element in the array with value 50
![Page 67: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/67.jpg)
Q: How should we implement IncrementPtr(),so that ‘q’ moves by one element when the following code executes?
void IncrementPtr(int **p){ p = p + 1; }
50 60 70
A q int A[3] = {50, 60, 70}; int *q = A; IncrementPtr(&q);'
A. p = p + 1; //The current one is correct B. &p = &p + 1; C. *p= *p + 1; D. *p++; E. p= &p+1;
![Page 68: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/68.jpg)
Q: How should we implement IncrementPtr(),so that ‘q’ moves by one element when the following code executes?
void IncrementPtr(int **p){ p = p + 1; }
50 60 70
A q int A[3] = {50, 60, 70}; int *q = A; IncrementPtr(&q);'
A. p = p + 1; //The current one is correct B. &p = &p + 1; C. *p= *p + 1; D. *p++; E. p= &p+1;
![Page 69: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/69.jpg)
What'is'really'in'a'executable'
%''gcc'hello.c'
%'./a.out''''(executable'loaded'in'memory'and'processed)'
'''''''''''''''''''''''Also'referred'to'as'“running”'the'C'program'
hello.c'
gcc'
a.out'
69
“Source”:%Program%in%C% “Executable”:%Equivalent%program%in%machine%language%
![Page 70: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/70.jpg)
What'does'the'executable'contain?'
• Instructions'or'“code”'• Data'''''What'is'data?'
• Any'information'that'instructions'operate'on'(objects'in'memory)'
'
'*
70
![Page 71: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/71.jpg)
C'Runtime'Environment''
• “Code”'(instructions'in'machine'language)'• “Data”'(initialized'and'uninitialized'a'static'allocated)'
Both'code'and'data'don’t'change'in'size''
• “Heap”'(for'dynamically'allocated'data)'• “Stack”'(for'function'local'variables)'Heap'and'stack'change'in'size'as'the'program'
executes'
'71
![Page 72: 30 › ... › PI_CSE30_lecture_2_C_after.pdfTwo important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another](https://reader035.vdocuments.site/reader035/viewer/2022063002/5f24ed73583c1a46d66721d4/html5/thumbnails/72.jpg)
C'Runtime'Environment'
72
Code'
Initialized'Data'
Uninitialized'Data'
Heap'
Stack'