C++ Memory
Pointers and joy!
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 1
C++ Memory Pointers and joy! January 07, 2019 Cinda Heeren / Will - - PowerPoint PPT Presentation
C++ Memory Pointers and joy! January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 1 Announcements HW1 corrections please check pinned Piazza post Gradescope registrations will start today check your ugrad e-mail for
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 1
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 2
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 3
void candyapple(int n) { for (int i = 1; i < n; i *= 3) cout << "iteration: " << i << endl; } void caramelcorn(int n) { for (int i = 0; i * i < 6 * n; i++) cout << "iteration: " << i << endl; }
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 4
int i, j; for (i = 1; i < 9*n; i = i*2) { for (j = n*n; j > 0; j--) { ... } } 1 9𝑜 1 𝑜2
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 5
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 6
int a = 5; int b = 7; int result = sum(a, b); int sum(int x, int y) { return x + y; } Actual parameters Formal parameters
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 7
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 8
// ... int r = 3; double area = circleArea(r); // ... double circleArea(double radius){ double pi = 3.1415; double sq_r = square(radius); return sq_r * pi; } double square(double x){ return x * x; } main memory
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 9
// ... int r = 3; double area = circleArea(r); // ... double circleArea(double radius){ double pi = 3.1415; double sq_r = square(radius); return sq_r * pi; } double square(double x){ return x * x; } main memory
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 10
// ... int r = 3; double area = circleArea(r); // ... double circleArea(double radius){ double pi = 3.1415; double sq_r = square(radius); return sq_r * pi; } double square(double x){ return x * x; } main memory
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 11
int a = 5; int b = 7; swap(a, b); cout << "a: " << a << endl; cout << "b: " << b << endl; void swap(int x, int y) { int temp = x; x = y; y = temp; }
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 12
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 13
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 14
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 15
… 1 220-1 int x = 23; 23 212 x int* p = &x; 4096 … p x = 47; 47 *p = 38; 38
int getArraySum(vector<int>& arr, int* pcount) { int sum = 0; for (int i = 0; i < arr.size(); i++) { if (arr[i] > 0) (*pcount)++; sum += arr[i]; } return sum; } int numpositive = 0; vector<int> numbers; // assume that 3, 7, -9, 5, -4 get push_back-ed into numbers int result = getArraySum(numbers, &numpositive); cout << "Array sum: " << result << endl; cout << "Number of positive elements: " << numpositive << endl;
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 16
void f1(int arg) { arg = 22; cout << "f1 arg: " << arg << "\n"; } void f2(int* arg) { *arg = 410; cout << "f2 arg: " << arg << "\n"; } int x = 45; f1(x); cout << "x after f1: " << x << "\n"; f2(&x); cout << "x after f2: << x << "\n";
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 17
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 18
int main() { int x = 5; int* p = &x; *p = 6; int** q = &p; int*** r = &q; cout << "*p: " << *p << endl; cout << "*q: " << *q << endl; cout << "**q: " << *(*q) << endl; }
int a = 5; int* b = new int; int* c = &a; *c = 4; int** d = &b; int* e = new int[a]; **d = 3; int* f = new int[*b]; delete b; delete e; // causes a memory leak delete[] f;
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 19
allocates an array of size a in dynamic memory
January 07, 2019 Cinda Heeren / Will Evans / Geoffrey Tien 20