CS 136 Remote Learning Edition Supplemental Contentcs136/current/handouts/...STACK int g = 5;const...
Transcript of CS 136 Remote Learning Edition Supplemental Contentcs136/current/handouts/...STACK int g = 5;const...
-
This scholarly work is copyright (c) 2020 Dave Tompkins and is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
CS 136 – Remote Learning EditionSupplemental Content
Intro Music: HAPPY by texasradiofish (c) copyright 2020 Licensed under a Creative Commons Noncommercial Sampling Plus license.http://dig.ccmixter.org/files/texasradiofish/62035 Ft: Haskel, Martijn de Boer, Apoxode, Stefan Kartenberg, Subhashish, boboshin
• The primary content source for CS 136 is the lecture notes (“readings”)
• This video is designed to supplement and enrich the lecture notes with additional examples and explanations
• This video was recorded in Fall 2020 – Any errata or discrepancies from the current lecture notes will be identified in an special piazza post
-
CS 136 Lecture NotesSupplemental Examples
Memory Snapshots and Control Flow
-
Control FlowExample 1
The Call Stack
-
void blue(void) {printf("three\n");return;
}
void green(void) {blue();printf("four\n");return;
}
void red(void) {printf("two\n");green();printf("five\n");return;
}
int main(void) {printf("one\n");red();printf("six\n");
}
main main
red
green
main
red
green
blue
main
red
green
main
red
mainmain
printf
mainmain
red
call stack over time
-
Memory SnapshotsExample 2
Read-Only, Global Data and the Stack
-
int g = 5;const int r = 13;
int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;
}
int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4
}
READ-ONLYr: 13
GLOBAL DATAg: 5
mainz: ???y: ???r/a: OS
STACK
-
STACK
int g = 5;const int r = 13;
int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;
}
int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4
}
READ-ONLYr: 13
GLOBAL DATAg: 5
mainz: 1y: ???r/a: OS
fooa: 1b: ???c: ???r/a: main ●
-
STACK
int g = 5;const int r = 13;
int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;
}
int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4
}
READ-ONLYr: 13
GLOBAL DATAg: 5
mainz: 1y: ???r/a: OS
fooa: 1b: 2c: 3r/a: main ●
-
STACK
int g = 5;const int r = 13;
int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;
}
int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4
}
READ-ONLYr: 13
GLOBAL DATAg: 5
mainz: 1y: 6r/a: O/S
-
Memory SnapshotsExample 3
Multiple Returns and Block Variables
-
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
READ-ONLY GLOBAL DATA
mainz: ???y: ???r/a: OS
STACK
-
READ-ONLY GLOBAL DATA
mainz: ???y: ???r/a: OS
STACK
say_hellor/a: main ●
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
-
READ-ONLY GLOBAL DATA
mainz: ???y: ???r/a: OS
STACK
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
-
READ-ONLY GLOBAL DATA
mainz: ???y: ???r/a: OS
STACK
fooa: -4b: 2c: 16d: ???
r/a: main ●
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
-
STACK
READ-ONLY GLOBAL DATA
mainz: -128y: ???r/a: OS
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
-
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
STACK
READ-ONLY GLOBAL DATA
mainz: -128y: ???r/a: OS
fooa: 3b: 2c: ???d: -3
r/a: main ●
-
void say_hello(void) {printf("hello\n");// SNAPSHOT 2
}
int foo(int a) {int b = 2;if (a < 0) {
int c = a * a;// SNAPSHOT 4return a * b * c;
} else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;
}return 0;
}
int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7
}
STACK
READ-ONLY GLOBAL DATA
mainz: -128y: -18r/a: OS
-
Memory SnapshotsExample 4Shadowing (Avoid This)
-
STACK
int n = 1;
int main(void) {printf("%d\n", n); // 1int n = 2;printf("%d\n", n); // 2{int n = 3;printf("%d\n", n); // 3
}printf("%d\n", n); // 2// SNAPSHOT
}
READ-ONLY GLOBAL DATAn: 1
mainn0: 2n1: 3r/a: OS
-
STACK
int n = 1;
int main(void) {printf("%d\n", n); // 1int n0 = 2;printf("%d\n", n0); // 2{int n1 = 3;printf("%d\n", n1); // 3
}printf("%d\n", n0); // 2// SNAPSHOT
}
READ-ONLY GLOBAL DATAn: 1
mainn0: 2n1: 3r/a: OS
-
Memory SnapshotsExample 5
Mutation & Loops
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 5
mainz: 1r/a: OS
fooa: 1b: 2i: ???r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 5
mainz: 1r/a: OS
fooa: 1b: 3i: ???r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 1b: 3i: ???r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 2b: 3i: ???r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 2b: 3i: 2r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 2b: 3i: 1r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 2b: 3i: 0r/a: main ●
-
STACK
int g = 5;
void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;
}// SNAPSHOT 8
}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATAg: 7
mainz: 1r/a: OS
fooa: 2b: 3i: -1r/a: main ●
-
Memory SnapshotsExample 6
Uninitialized Variables (yuck)and Variable Definition inside of a Loop
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: 5i: ???k: ???r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: ???k: ???r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 2k: ???r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 2k: 0r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 2k: 1r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 1k: 1r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 2k: 0r/a: main ●
-
STACK
void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;
}}
int main(void) {int z = 1;foo(z);
}
READ-ONLY GLOBAL DATA
mainz: 1r/a: OS
fooa: 1b: ???c: ???i: 2k: 1r/a: main ●
-
Memory SnapshotsExample 7
Recursion, Recursion, Recursion ...
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 0r/a: main ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 0r/a: main ●
sum_firstn: 1sum: 0r/a: sum_first ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 0r/a: main ●
sum_firstn: 1sum: 0r/a: sum_first ●
sum_firstn: 0sum: 0r/a: sum_first ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 0r/a: main ●
sum_firstn: 1sum: 0r/a: sum_first ●
sum_firstn: 0sum: 0r/a: sum_first ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 0r/a: main ●
sum_firstn: 1sum: 1r/a: sum_first ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: ???r/a: OS
sum_firstn: 2sum: 3r/a: main ●
-
STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);
}// SNAPSHOT 5, 6, 7return sum;
}
int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATA
maina: 3r/a: OS
-
Memory SnapshotsExample 8Introduction to Pointers
-
STACK
int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5
}
READ-ONLY GLOBAL DATA
maini: 5j: 6k: 7p: ???q: ???r: ???s: ???d: ???r/a: OS
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: ???s: ???d: ???r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: NULLs: ???d: ???r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ???r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5
}
READ-ONLY GLOBAL DATA
-
Memory SnapshotsExample 9
Pointers with Mutation
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: ●s: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: ●s: NULLd: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 7p: ●q: ●r: ●s: NULLd: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 10p: ●q: ●r: ●s: NULLd: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 6p: ●q: ●r: ●s: NULLd: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 6p: ●q: ●r: ●s: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 6p: ●q: ●r: ●s: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
STACK
maini: 5j: 6k: 1p: ●q: ●r: ●s: ●d: ●r/a: OS
int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10
}
READ-ONLY GLOBAL DATA
-
Memory SnapshotsExample 10
Pointer Parameters and Structures
-
mainz: 1p:r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 5
3 7
-
mainz: 1p: .x: 3 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 5
-
mainz: 2p: .x: 3 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 5
add1a: ●
r/a: main ●
-
mainz: 2p: .x: 3 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6
add1a: ●
r/a: main ●
-
mainz: 2p: .x: 4 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6
add1a: ●
r/a: main ●
-
mainz: 2p: .x: 4 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6
posn_add1s: ●
r/a: main ●
-
mainz: 2p: .x: 5 .y: 7r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6
posn_add1s: ●
r/a: main ●
-
mainz: 2p: .x: 5 .y: 8r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6
posn_add1s: ●
r/a: main ●
add1a: ●
r/a: posn_add1 ●
-
mainz: 2p: .x: 5 .y: 8r/a: OS
struct posn {int x;int y;
};
int g = 5;
void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7
}
void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);
}
int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8
}
READ-ONLY GLOBAL DATAg: 6